added client method for added fields
This commit is contained in:
parent
25a43006d3
commit
a08a2f2ac0
@ -1,5 +1,10 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type FieldsType string
|
||||
|
||||
const (
|
||||
@ -63,3 +68,23 @@ const (
|
||||
NameEntityTypeQuote NameEntityType = "QUOTE"
|
||||
NameEntityTypeRequisite NameEntityType = "REQUISITE"
|
||||
)
|
||||
|
||||
type AddFields struct {
|
||||
FieldName string `json:"FIELD_NAME"`
|
||||
EditFormLabel string `json:"EDIT_FORM_LABEL"`
|
||||
ListColumnLabel string `json:"LIST_COLUMN_LABEL"`
|
||||
UserTypeID string `json:"USER_TYPE_ID"` // Тип поля
|
||||
XMLID string `json:"XML_ID"`
|
||||
Settings map[string]interface{} `json:"SETTINGS"`
|
||||
}
|
||||
|
||||
func (a *AddFields) GenFieldName() {
|
||||
currentTime := time.Now().Unix()
|
||||
currentTimeStr := strconv.FormatInt(currentTime, 10)
|
||||
a.FieldName = currentTimeStr
|
||||
a.XMLID = currentTimeStr
|
||||
}
|
||||
|
||||
type AddFieldsResponse struct {
|
||||
ID int64 `json:"result"`
|
||||
}
|
||||
|
@ -202,6 +202,7 @@ func (b *Bitrix) GetListPipelines(entityTypeID models.IntegerEntityType, accessT
|
||||
func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string, domain string) (*models.FieldsResponse, error) {
|
||||
for {
|
||||
if b.rateLimiter.Check() {
|
||||
var listFields models.FieldsResponse
|
||||
switch fieldType {
|
||||
case models.FieldTypeCompany:
|
||||
fullURL := fmt.Sprintf("https://%s/rest/crm.company.userfield.list", domain)
|
||||
@ -227,7 +228,6 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
|
||||
return nil, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
var listFields models.FieldsResponse
|
||||
err := json.Unmarshal(resBody, &listFields)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal models.Company:", zap.Error(err))
|
||||
@ -260,7 +260,6 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
|
||||
return nil, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
var listFields models.FieldsResponse
|
||||
err := json.Unmarshal(resBody, &listFields)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal models.Lead:", zap.Error(err))
|
||||
@ -293,7 +292,6 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
|
||||
return nil, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
var listFields models.FieldsResponse
|
||||
err := json.Unmarshal(resBody, &listFields)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal models.Contact:", zap.Error(err))
|
||||
@ -325,7 +323,6 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
|
||||
return nil, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
var listFields models.FieldsResponse
|
||||
err := json.Unmarshal(resBody, &listFields)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal models.Company:", zap.Error(err))
|
||||
@ -376,3 +373,147 @@ func (b *Bitrix) GetCurrentUser(accessToken string, domain string) (*models.Resp
|
||||
time.Sleep(b.rateLimiter.Interval)
|
||||
}
|
||||
}
|
||||
|
||||
// before neeed call req.GenFieldName()
|
||||
func (b *Bitrix) AddFields(req models.AddFields, entity models.FieldsType, accessToken string, domain string) (int64, error) {
|
||||
for {
|
||||
if b.rateLimiter.Check() {
|
||||
var result models.AddFieldsResponse
|
||||
switch entity {
|
||||
case models.FieldTypeContact:
|
||||
bodyBytes, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
b.logger.Error("error marshal req in Add Fields:", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf("https://%s/rest/crm.contact.userfield.add", domain)
|
||||
agent := b.fiberClient.Post(uri)
|
||||
agent.Set("Content-Type", "application/json").Body(bodyBytes)
|
||||
agent.Set("Authorization", "Bearer "+accessToken)
|
||||
|
||||
statusCode, resBody, errs := agent.Bytes()
|
||||
if len(errs) > 0 {
|
||||
for _, err := range errs {
|
||||
b.logger.Error("error sending request in AddFields", zap.Error(err))
|
||||
}
|
||||
return 0, fmt.Errorf("request AddFields failed: %v", errs[0])
|
||||
}
|
||||
|
||||
if statusCode != fiber.StatusOK {
|
||||
errorMessage := fmt.Sprintf("error AddFields contact statusCode - %d, respBody - %s", statusCode, string(resBody))
|
||||
b.logger.Error(errorMessage, zap.Int("status", statusCode))
|
||||
return 0, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
err = json.Unmarshal(resBody, &result)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal AddFields", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return result.ID, nil
|
||||
case models.FieldTypeCompany:
|
||||
bodyBytes, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
b.logger.Error("error marshal req in Add Fields:", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf("https://%s/rest/crm.company.userfield.add", domain)
|
||||
agent := b.fiberClient.Post(uri)
|
||||
agent.Set("Content-Type", "application/json").Body(bodyBytes)
|
||||
agent.Set("Authorization", "Bearer "+accessToken)
|
||||
|
||||
statusCode, resBody, errs := agent.Bytes()
|
||||
if len(errs) > 0 {
|
||||
for _, err := range errs {
|
||||
b.logger.Error("error sending request in AddFields", zap.Error(err))
|
||||
}
|
||||
return 0, fmt.Errorf("request AddFields failed: %v", errs[0])
|
||||
}
|
||||
|
||||
if statusCode != fiber.StatusOK {
|
||||
errorMessage := fmt.Sprintf("error AddFields company statusCode - %d, respBody - %s", statusCode, string(resBody))
|
||||
b.logger.Error(errorMessage, zap.Int("status", statusCode))
|
||||
return 0, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
err = json.Unmarshal(resBody, &result)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal AddFields", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return result.ID, nil
|
||||
case models.FieldTypeDeal:
|
||||
bodyBytes, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
b.logger.Error("error marshal req in Add Fields:", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf("https://%s/rest/crm.deal.userfield.add", domain)
|
||||
agent := b.fiberClient.Post(uri)
|
||||
agent.Set("Content-Type", "application/json").Body(bodyBytes)
|
||||
agent.Set("Authorization", "Bearer "+accessToken)
|
||||
|
||||
statusCode, resBody, errs := agent.Bytes()
|
||||
if len(errs) > 0 {
|
||||
for _, err := range errs {
|
||||
b.logger.Error("error sending request in AddFields", zap.Error(err))
|
||||
}
|
||||
return 0, fmt.Errorf("request AddFields failed: %v", errs[0])
|
||||
}
|
||||
|
||||
if statusCode != fiber.StatusOK {
|
||||
errorMessage := fmt.Sprintf("error AddFields deal statusCode - %d, respBody - %s", statusCode, string(resBody))
|
||||
b.logger.Error(errorMessage, zap.Int("status", statusCode))
|
||||
return 0, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
err = json.Unmarshal(resBody, &result)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal AddFields", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return result.ID, nil
|
||||
case models.FieldTypeLead:
|
||||
bodyBytes, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
b.logger.Error("error marshal req in Add Fields:", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
uri := fmt.Sprintf("https://%s/rest/crm.lead.userfield.add", domain)
|
||||
agent := b.fiberClient.Post(uri)
|
||||
agent.Set("Content-Type", "application/json").Body(bodyBytes)
|
||||
agent.Set("Authorization", "Bearer "+accessToken)
|
||||
|
||||
statusCode, resBody, errs := agent.Bytes()
|
||||
if len(errs) > 0 {
|
||||
for _, err := range errs {
|
||||
b.logger.Error("error sending request in AddFields", zap.Error(err))
|
||||
}
|
||||
return 0, fmt.Errorf("request AddFields failed: %v", errs[0])
|
||||
}
|
||||
|
||||
if statusCode != fiber.StatusOK {
|
||||
errorMessage := fmt.Sprintf("error AddFields lead statusCode - %d, respBody - %s", statusCode, string(resBody))
|
||||
b.logger.Error(errorMessage, zap.Int("status", statusCode))
|
||||
return 0, fmt.Errorf(errorMessage)
|
||||
}
|
||||
|
||||
err = json.Unmarshal(resBody, &result)
|
||||
if err != nil {
|
||||
b.logger.Error("error unmarshal AddFields", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return result.ID, nil
|
||||
}
|
||||
}
|
||||
time.Sleep(b.rateLimiter.Interval)
|
||||
}
|
||||
}
|
||||
|
@ -2,9 +2,9 @@ package bitrixClient
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"go.uber.org/zap"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/models"
|
||||
"penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/workers/limiter"
|
||||
"testing"
|
||||
"time"
|
||||
@ -22,10 +22,28 @@ func TestGetListFields(t *testing.T) {
|
||||
RateLimiter: lim,
|
||||
})
|
||||
|
||||
result, err := b.GetCurrentUser("9213f0660000071b00717f92000000010000070cbbcdb7c07c2a5e9668d3f7b04c4f8f", "b24-ld76ub.bitrix24.ru")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
arr := []models.FieldsType{models.FieldTypeLead, models.FieldTypeCompany, models.FieldTypeContact, models.FieldTypeDeal}
|
||||
|
||||
for _, tipe := range arr {
|
||||
req := models.AddFields{
|
||||
EditFormLabel: "ТЕСТОВАЯ СТРОКА ОТ АПИ ГОГОГОГОГОГОГОГОГГО",
|
||||
ListColumnLabel: "ТЕСТОВАЯ СТРОКА ОТ АПИ ГОГОГОГОГОГОГОГОГГО",
|
||||
UserTypeID: "string",
|
||||
Settings: map[string]interface{}{
|
||||
"DEFAULT_VALUE": "GOGOGOGOGOGOGO!",
|
||||
}}
|
||||
req.GenFieldName()
|
||||
result, err := b.AddFields(req, tipe, "6142f1660000071b00717f92000000010000075c982e18665711d1c3e5749d1dda6679", "b24-ld76ub.bitrix24.ru")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
fmt.Println(result)
|
||||
}
|
||||
r, _ := json.Marshal(result)
|
||||
fmt.Println(string(r))
|
||||
|
||||
//result, err := b.GetListFields(models.FieldTypeLead, "3434f1660000071b00717f920000000100000748ae9cd373ba39739040870e7dc9fb99", "b24-ld76ub.bitrix24.ru")
|
||||
//if err != nil {
|
||||
// fmt.Println(err)
|
||||
//}
|
||||
//r, _ := json.Marshal(result)
|
||||
//fmt.Println(string(r))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user