added getting current user client method

This commit is contained in:
Pavel 2024-09-22 15:52:26 +03:00
parent 79dadbd93b
commit 25a43006d3
3 changed files with 70 additions and 12 deletions

@ -1,5 +1,7 @@
package models
import "time"
type ResponseGetListUsers struct {
Result []User `json:"result"`
Total int `json:"total"`
@ -42,3 +44,25 @@ type User struct {
UFDistrict *string `json:"UF_DISTRICT"`
UFPhoneInner string `json:"UF_PHONE_INNER"`
}
type ResponseGetCurrentUser struct {
Result CurrentUser `json:"result"`
}
type CurrentUser struct {
ID string `json:"ID"`
XMLID string `json:"XML_ID"`
Active bool `json:"ACTIVE"`
Name string `json:"NAME"`
LastName string `json:"LAST_NAME"`
Email string `json:"EMAIL"`
LastLogin time.Time `json:"LAST_LOGIN"`
DateRegister time.Time `json:"DATE_REGISTER"`
IsOnline string `json:"IS_ONLINE"`
TimestampX string `json:"TIMESTAMP_X"`
LastActivityDate string `json:"LAST_ACTIVITY_DATE"`
PersonalGender string `json:"PERSONAL_GENDER"`
PersonalBirthday string `json:"PERSONAL_BIRTHDAY"`
UFEmploymentDate string `json:"UF_EMPLOYMENT_DATE"`
UFDepartment []int `json:"UF_DEPARTMENT"`
}

@ -45,12 +45,12 @@ func NewBitrixClient(deps BitrixDeps) *Bitrix {
}
// https://dev.1c-bitrix.ru/rest_help/users/user_search.php
func (b *Bitrix) GetUserList(accesToken string, domain string) (*models.ResponseGetListUsers, error) {
func (b *Bitrix) GetUserList(accessToken string, domain string) (*models.ResponseGetListUsers, error) {
for {
if b.rateLimiter.Check() {
uri := fmt.Sprintf("https://%s/rest/user.search", domain)
agent := b.fiberClient.Post(uri)
agent.Set("Authorization", "Bearer "+accesToken)
agent.Set("Authorization", "Bearer "+accessToken)
statusCode, resBody, errs := agent.Bytes()
if len(errs) > 0 {
for _, err := range errs {
@ -119,12 +119,12 @@ func (b *Bitrix) CreateWebHook(req models.WebHookRequest, domain string) (*model
}
}
func (b *Bitrix) GetListSteps(accesToken string, domain string) (*models.StepsResponse, error) {
func (b *Bitrix) GetListSteps(accessToken string, domain string) (*models.StepsResponse, error) {
for {
if b.rateLimiter.Check() {
uri := fmt.Sprintf("https://%s/rest/crm.status.list", domain)
agent := b.fiberClient.Post(uri)
agent.Set("Authorization", "Bearer "+accesToken)
agent.Set("Authorization", "Bearer "+accessToken)
requestBody := map[string]interface{}{
"filter": map[string]string{
"ENTITY_ID": "STATUS",
@ -161,12 +161,12 @@ func (b *Bitrix) GetListSteps(accesToken string, domain string) (*models.StepsRe
}
}
func (b *Bitrix) GetListPipelines(entityTypeID models.IntegerEntityType, accesToken string, domain string) (*models.CategoryResponse, error) {
func (b *Bitrix) GetListPipelines(entityTypeID models.IntegerEntityType, accessToken string, domain string) (*models.CategoryResponse, error) {
for {
if b.rateLimiter.Check() {
uri := fmt.Sprintf("https://%s/rest/crm.category.list", domain)
agent := b.fiberClient.Post(uri)
agent.Set("Authorization", "Bearer "+accesToken)
agent.Set("Authorization", "Bearer "+accessToken)
agent.Set("Content-Type", "application/json")
requestBody := map[string]interface{}{
"entityTypeId": entityTypeID,
@ -199,7 +199,7 @@ func (b *Bitrix) GetListPipelines(entityTypeID models.IntegerEntityType, accesTo
}
}
func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string, domain string) (interface{}, error) {
func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string, domain string) (*models.FieldsResponse, error) {
for {
if b.rateLimiter.Check() {
switch fieldType {
@ -234,7 +234,7 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
return nil, err
}
return listFields, nil
return &listFields, nil
case models.FieldTypeLead:
fullURL := fmt.Sprintf("https://%s/rest/crm.lead.userfield.list", domain)
@ -267,7 +267,7 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
return nil, err
}
return listFields, nil
return &listFields, nil
case models.FieldTypeContact:
fullURL := fmt.Sprintf("https://%s/rest/crm.contact.userfield.list", domain)
@ -300,7 +300,7 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
return nil, err
}
return listFields, nil
return &listFields, nil
case models.FieldTypeDeal:
fullURL := fmt.Sprintf("https://%s/rest/crm.deal.userfield.list", domain)
agent := b.fiberClient.Post(fullURL)
@ -332,7 +332,7 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
return nil, err
}
return listFields, nil
return &listFields, nil
}
}
time.Sleep(b.rateLimiter.Interval)
@ -342,3 +342,37 @@ func (b *Bitrix) GetListFields(fieldType models.FieldsType, accessToken string,
func (b *Bitrix) GetListTags() {
}
func (b *Bitrix) GetCurrentUser(accessToken string, domain string) (*models.ResponseGetCurrentUser, error) {
for {
if b.rateLimiter.Check() {
uri := fmt.Sprintf("https://%s/rest/user.current", domain)
agent := b.fiberClient.Post(uri)
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 GetCurrentUser", zap.Error(err))
}
return nil, fmt.Errorf("request GetCurrentUser failed: %v", errs[0])
}
if statusCode != fiber.StatusOK {
errorMessage := fmt.Sprintf("error GetCurrentUser statusCode - %d, respBody - %s", statusCode, string(resBody))
b.logger.Error(errorMessage, zap.Int("status", statusCode))
return nil, fmt.Errorf(errorMessage)
}
var result models.ResponseGetCurrentUser
err := json.Unmarshal(resBody, &result)
if err != nil {
b.logger.Error("error unmarshal CurrentUser", zap.Error(err))
return nil, err
}
return &result, nil
}
time.Sleep(b.rateLimiter.Interval)
}
}

@ -22,7 +22,7 @@ func TestGetListFields(t *testing.T) {
RateLimiter: lim,
})
result, err := b.GetListSteps("9213f0660000071b00717f92000000010000070cbbcdb7c07c2a5e9668d3f7b04c4f8f", "b24-ld76ub.bitrix24.ru")
result, err := b.GetCurrentUser("9213f0660000071b00717f92000000010000070cbbcdb7c07c2a5e9668d3f7b04c4f8f", "b24-ld76ub.bitrix24.ru")
if err != nil {
fmt.Println(err)
}