227 lines
10 KiB
Go
227 lines
10 KiB
Go
package models
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
)
|
||
|
||
type DealReq struct {
|
||
Name string `json:"name"` // название сделки
|
||
Price int `json:"price"` // бюджет сделки
|
||
StatusID int32 `json:"status_id"` // id статуса (шага в нашем случае) в который добавляется сделка
|
||
PipelineID int32 `json:"pipeline_id"` // ID воронки, в которую добавляется сделка
|
||
CreatedBy int32 `json:"created_by"` // id пользователя amoid который создает сделку (тот кто подключил интеграцию)
|
||
UpdatedBy int `json:"updated_by"` // ID пользователя, изменяющий сделку. При передаче значения 0, сделка будет считаться измененной роботом
|
||
ClosedAt int64 `json:"closed_at"` // Дата закрытия сделки, передается в Unix Timestamp
|
||
CreatedAt int64 `json:"created_at"` // Дата создания сделки, передается в Unix Timestamp
|
||
UpdatedAt int64 `json:"updated_at"` // Дата изменения сделки, передается в Unix Timestamp
|
||
LossReasonID *int `json:"loss_reason_id,omitempty"` // ID причины отказа
|
||
ResponsibleUserID int32 `json:"responsible_user_id"` // ID пользователя, ответственного за сделку, в нашем случае PerformerID
|
||
CustomFieldsValues []FieldsValues `json:"custom_fields_values"` // Массив полей которые заполняются значениями
|
||
TagsToAdd []Tag `json:"tags_to_add"` // Массив тегов для добавления
|
||
Embed Embedd `json:"_embedded"`
|
||
RequestID string `json:"request_id"`
|
||
}
|
||
|
||
type ValueInterface interface{}
|
||
|
||
type FieldsValues struct {
|
||
FieldID int `json:"field_id"`
|
||
Values []ValueInterface `json:"values"`
|
||
}
|
||
|
||
type Values struct {
|
||
Value string `json:"value"` // пока так пока не понятно
|
||
}
|
||
|
||
type ValuesFile struct {
|
||
Value ValueFile `json:"value"`
|
||
}
|
||
type ValueFile struct {
|
||
FileUUID string `json:"file_uuid"`
|
||
VersionUUID string `json:"version_uuid"`
|
||
FileName string `json:"file_name"`
|
||
FileSize int64 `json:"file_size"`
|
||
}
|
||
|
||
func (fv *FieldsValues) UnmarshalJSON(data []byte) error {
|
||
type Alias FieldsValues
|
||
aux := struct {
|
||
Alias
|
||
FieldID int `json:"field_id"`
|
||
Values []json.RawMessage `json:"values"`
|
||
}{}
|
||
|
||
if err := json.Unmarshal(data, &aux); err != nil {
|
||
return err
|
||
}
|
||
|
||
fv.FieldID = aux.FieldID
|
||
fv.Values = make([]ValueInterface, len(aux.Values))
|
||
|
||
for i, rawVal := range aux.Values {
|
||
var v map[string]interface{}
|
||
if err := json.Unmarshal(rawVal, &v); err != nil {
|
||
return err
|
||
}
|
||
|
||
if _, ok := v["value"]; !ok {
|
||
return fmt.Errorf("missing value in JSON")
|
||
}
|
||
|
||
var value ValueInterface
|
||
if _, ok := v["value"].(map[string]interface{}); ok {
|
||
var fileStruct ValuesFile
|
||
if err := json.Unmarshal(rawVal, &fileStruct); err != nil {
|
||
return err
|
||
}
|
||
value = fileStruct
|
||
} else {
|
||
var valValue Values
|
||
if err := json.Unmarshal(rawVal, &valValue); err != nil {
|
||
return err
|
||
}
|
||
value = valValue
|
||
}
|
||
|
||
fv.Values[i] = value
|
||
}
|
||
|
||
return nil
|
||
}
|
||
|
||
type Embedd struct {
|
||
Tags []Tag `json:"tags"` // Данные тегов, добавляемых к сделке
|
||
Contact []Contact `json:"contacts"` // Данные контактов, которые будет прикреплены к сделке
|
||
Company []Company `json:"companies"` // Данные компании, которая будет прикреплена к сделке
|
||
Source Source `json:"source"`
|
||
}
|
||
|
||
type Contact struct {
|
||
ID int32 `json:"id"`
|
||
Name string `json:"first_name"`
|
||
ResponsibleUserID int32 `json:"responsible_user_id"` // ID пользователя, ответственного за сделку, в нашем случае PerformerID
|
||
CreatedBy int32 `json:"created_by"` // id пользователя amoid который создает сделку (тот кто подключил интеграцию)
|
||
UpdatedBy int `json:"updated_by"`
|
||
CreatedAt int64 `json:"created_at"`
|
||
UpdatedAt int64 `json:"updated_at"` // Дата изменения сделки, передается в Unix Timestamp
|
||
CustomFieldsValues []FieldsValues `json:"custom_fields_values"` // Массив полей которые заполняются значениями
|
||
}
|
||
|
||
type Company struct {
|
||
Name string `json:"name"` // Название компании
|
||
ResponsibleUserID int32 `json:"responsible_user_id"` // ID пользователя, ответственного за сделку, в нашем случае PerformerID
|
||
CreatedBy int32 `json:"created_by"` // id пользователя amoid который создает сделку (тот кто подключил интеграцию)
|
||
UpdatedBy int `json:"updated_by"`
|
||
CreatedAt int64 `json:"created_at"`
|
||
UpdatedAt int64 `json:"updated_at"` // Дата изменения сделки, передается в Unix Timestamp
|
||
CustomFieldsValues []FieldsValues `json:"custom_fields_values"` // Массив полей которые заполняются значениями
|
||
}
|
||
|
||
type Source struct {
|
||
ExternalID int `json:"external_id"` // Внешний ID источника
|
||
Type string `json:"type"` // Тип источника. Для сделок, добавляемых интеграциями, поддерживается только widget
|
||
}
|
||
|
||
type DealResp struct {
|
||
DealID int32 `json:"id"` // ID сделки
|
||
ContactID int `json:"contact_id"` // ID контакта
|
||
CompanyID int `json:"company_id"` // ID компании
|
||
Merged bool `json:"merged"` // Флаг, который показывает, найден дубль подходящий под условия поиска дублей и произведено объединение или нет
|
||
RequestID []string `json:"request_id"` // Массив строк с пользовательскими идентификаторами, которые были переданы с каждой сущностью
|
||
}
|
||
|
||
type UpdateDealReq struct {
|
||
DealID int32 `json:"id"` // ID сделки
|
||
CustomFieldsValues []FieldsValues `json:"custom_fields_values"` // Массив полей которые заполняются значениями
|
||
}
|
||
|
||
type UpdateDealResp struct {
|
||
Embedded EmbeddedUpdateDeal `json:"_embedded"`
|
||
}
|
||
|
||
type EmbeddedUpdateDeal struct {
|
||
Leads []struct {
|
||
ID int32 `json:"id"`
|
||
UpdatedAt int64 `json:"updated_at"`
|
||
}
|
||
}
|
||
|
||
type Customer struct {
|
||
Name string `json:"name"`
|
||
NextPrice int `json:"next_price"`
|
||
NextDate int64 `json:"next_date"`
|
||
ResponsibleUserID int32 `json:"responsible_user_id"`
|
||
StatusID *int32 `json:"status_id,omitempty"`
|
||
Periodicity int `json:"periodicity"`
|
||
CreatedBy int `json:"created_by"`
|
||
UpdatedBy int `json:"updated_by"`
|
||
CreatedAt int64 `json:"created_at"`
|
||
UpdatedAt int64 `json:"updated_at"`
|
||
CustomFields []FieldsValues `json:"custom_fields_values"`
|
||
TagsToAdd []Tag `json:"tags_to_add"`
|
||
Embed Embedd `json:"_embedded"`
|
||
RequestID string `json:"request_id"`
|
||
}
|
||
|
||
type CustomerResp struct {
|
||
Embedded EmbeddedCreateCustomers `json:"_embedded"`
|
||
}
|
||
|
||
type EmbeddedCreateCustomers struct {
|
||
Customers []struct {
|
||
ID int32 `json:"id"`
|
||
RequestID string `json:"request_id"`
|
||
}
|
||
}
|
||
|
||
type CreateSession struct {
|
||
FileName string `json:"file_name"` // обязательное поле
|
||
FileSize int64 `json:"file_size"` // обязательное поле
|
||
FileUUID string `json:"file_uuid"` // UUID файла, для которого загружается новая версия файла. Если UUID не задан, то будет создан новый файл.
|
||
ContentType string `json:"content_type"` // MIME-тип файла
|
||
WithPreview bool `json:"with_preview"` // При установке данного флага для файла будет сгенерировано превью
|
||
}
|
||
|
||
// представляет данные о созданной сессии загрузки файла
|
||
type UploadSession struct {
|
||
SessionID int `json:"session_id"`
|
||
UploadURL string `json:"upload_url"`
|
||
MaxFileSize int64 `json:"max_file_size"`
|
||
MaxPartSize int64 `json:"max_part_size"`
|
||
}
|
||
|
||
// представляет информацию о загруженном файле
|
||
type UploadedFile struct {
|
||
UUID string `json:"uuid"`
|
||
Type string `json:"type"`
|
||
IsTrashed bool `json:"is_trashed"`
|
||
Name string `json:"name"`
|
||
SanitizedName string `json:"sanitized_name"`
|
||
Size int64 `json:"size"`
|
||
SourceID int `json:"source_id"`
|
||
VersionUUID string `json:"version_uuid"`
|
||
HasMultipleVersions bool `json:"has_multiple_versions"`
|
||
CreatedAt int64 `json:"created_at"`
|
||
CreatedBy struct {
|
||
ID int `json:"id"`
|
||
Type string `json:"type"`
|
||
} `json:"created_by"`
|
||
UpdatedAt int64 `json:"updated_at"`
|
||
DeletedAt int64 `json:"deleted_at"`
|
||
DeletedBy interface{} `json:"deleted_by"`
|
||
Metadata Metadata `json:"metadata"`
|
||
Previews []PreviewFile `json:"previews"`
|
||
}
|
||
|
||
type Metadata struct {
|
||
Extension string `json:"extension"`
|
||
MIMEType string `json:"mime_type"`
|
||
}
|
||
|
||
type PreviewFile struct {
|
||
DownloadLink string `json:"download_link"`
|
||
Width int `json:"width"`
|
||
Height int `json:"height"`
|
||
}
|