added client method for added fields

This commit is contained in:
Pavel 2024-09-23 12:31:38 +03:00
parent 25a43006d3
commit a08a2f2ac0
3 changed files with 194 additions and 10 deletions

@ -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))
}