common/model/amo.go
2024-06-28 10:18:42 +03:00

300 lines
12 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
import "time"
type AmoAccountUser struct {
ID int64 `json:"id"` // ID пользователя
AmoID int32 `json:"amoID"` // ID компании в амо, к которой пользователь принадлежит
AmoUserID int32 `json:"amoUserID"` // ID пользователя в амо
Name string `json:"name"` // Имя
Email string `json:"email"` // Email
Role int32 `json:"role"` // Роль
Group int32 `json:"group"` // Группа
Deleted bool `json:"deleted"`
CreatedAt time.Time `json:"createdAt"`
}
type AmoAccount struct {
ID int64 `json:"id"` // ID компании
AccountID string `json:"accountID"` // ID аккаунта нас
AmoID int32 `json:"amoID"` // ID компании в амо
Name string `json:"name"` // Название
Deleted bool `json:"deleted"`
CreatedAt time.Time `json:"createdAt"`
Subdomain string `json:"subdomain"` // поддомен
Country string `json:"country"` // Страна
DriveURL string `json:"driveURL"` // URL объктного хранилища
Stale bool `json:"stale"` // флаг "не свежести" если с токенами все в порядке - false, если просрочились то true
}
type UserGroups struct {
ID int `json:"id" bson:"id"`
Name string `json:"name" bson:"name"`
UUID interface{} `json:"uuid" bson:"uuid"`
}
type Token struct {
AccountID string `json:"account_id"` // id в квизе
RefreshToken string `json:"refresh_token"` // 80 дней
AccessToken string `json:"access_token"` // 20 минут
AuthCode string `json:"auth_code"`
Expiration int64 `json:"expiration"` // таймшамп времени когда кончится AccessToken
CreatedAt int64 `json:"created_at"` // таймшамп времени создания, нужен для отслеживания 80 дней
}
type Pipeline struct {
// айдишник в нашей системе Primary Key
ID int64 `json:"ID"`
/* - айдишник воронки в амо*/
Amoid int32 `json:"AmoID"`
/* - связь с аккаунтом в интеграции амо id аккаунта в амо*/
AccountID int32 `json:"AccountID"`
/* - название воронки в амо*/
Name string `json:"Name"`
/* - флаг архивной воронки в амо*/
Isarchive bool `json:"IsArchive"`
/* - флаг мягкого удаления*/
Deleted bool `json:"Deleted"`
/* - таймштамп создания воронки в нашей системе*/
Createdat int64 `json:"CreatedAt"`
}
type Step struct {
/* - айдишник в нашей системе Primary Key*/
ID int64 `json:"ID"`
/* - айдишник шага воронки в амо*/
Amoid int32 `json:"AmoID"`
/* - айдишник воронки в амо*/
Pipelineid int32 `json:"PipelineID"`
/* - связь с аккаунтом в интеграции амо id в амо*/
Accountid int32 `json:"AccountID"`
/* - название воронки в амо*/
Name string `json:"Name"`
/* - цвет шага в амо*/
Color string `json:"Color"`
/* - флаг мягкого удаления*/
Deleted bool `json:"Deleted"`
/* - таймштамп создания воронки в нашей системе*/
Createdat int64 `json:"CreatedAt"`
}
type Tag struct {
/* - айдишник в нашей системе Primary Key*/
ID int64 `json:"ID"`
/* - айдишник тега в амо*/
Amoid int32 `json:"AmoID"`
/* - связь с аккаунтом в интеграции амо id аккаунта в амо*/
Accountid int32 `json:"AccountID"`
/* - сущность, к которой принадлежит этот тег. Наверное, стоит сделать через enum в базе*/
Entity EntityType `json:"Entity"`
/* - название тега в амо*/
Name string `json:"Name"`
/* - цвет тега в амо*/
Color *string `json:"Color"`
/* - флаг мягкого удаления*/
Deleted bool `json:"Deleted"`
/* - таймштамп создания тега в нашей системе*/
Createdat int64 `json:"CreatedAt"`
}
type Field struct {
/* - айдишник в нашей системе Primary Key*/
ID int64 `json:"ID"`
/* - айдишник кастомного поля в амо*/
Amoid int32 `json:"AmoID"`
/* - кодовое слово в амо*/
Code string `json:"Code"`
/* - связь с аккаунтом в интеграции амо id аккаунта в амо*/
Accountid int32 `json:"AccountID"`
/* - название воронки в амо*/
Name string `json:"Name"`
/* - тип сущности в амо, для которой это кастомное поле*/
Entity EntityType `json:"Entity"`
/* - тип поля https://www.amocrm.ru/developers/content/crm_platform/custom-fields#%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D1%8B%D0%B5-%D1%82%D0%B8%D0%BF%D1%8B-%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9*/
Type FieldType `json:"Type"`
/* - флаг мягкого удаления*/
Deleted bool `json:"Deleted"`
/* - таймштамп создания воронки в нашей системе*/
Createdat int64 `json:"CreatedAt"`
}
type EntityType string
const (
LeadsType EntityType = "leads"
ContactsType EntityType = "contacts"
CompaniesType EntityType = "companies"
CustomersType EntityType = "customers"
)
type Rule struct {
/* - айдишник в нашей системе*/
ID int64 `json:"ID"`
/* - связь с аккаунтом в интеграции амо id в амо*/
Accountid int32 `json:"AccountID"`
/* - айдишник опроса*/
Quizid int32 `json:"QuizID"`
/* - айдишник ответственного за сделку*/
Performerid int32 `json:"PerformerID"`
/* - айдишник воронки*/
Pipelineid int32 `json:"PipelineID"`
/* - айдишник этапа*/
Stepid int32 `json:"StepID"`
/* - список UTM для этого опроса*/
//Utms []int32 `json:"UTMs"`
/* - правила заполнения полей сущностей в амо*/
Fieldsrule Fieldsrule `json:"FieldsRule"`
// теги добавляемые к сделке
TagsToAdd TagsToAdd `json:"TagsToAdd"`
/* - флаг мягкого удаления*/
Deleted bool `json:"Deleted"`
/* - таймштамп создания воронки в нашей системе*/
Createdat int64 `json:"CreatedAt"`
}
type TagsToAdd struct {
Lead []int64 `json:"Lead"`
Contact []int64 `json:"Contact"`
Company []int64 `json:"Company"`
Customer []int64 `json:"Customer"`
}
type Fieldsrule struct {
Lead FieldRule `json:"Lead"`
Contact ContactRules `json:"Contact"`
Company FieldRule `json:"Company"`
Customer FieldRule `json:"Customer"`
}
type FieldRule struct {
/* - сопоставление айдишника вопроса полю, которое будет заполняться ответом. соответственно QuestionID это айдишник вопроса. это я так мэпу пытался записать*/
Questionid map[int]int `json:"QuestionID"` // ключ id вопроса значение id астомного поля
}
type ContactRules struct {
// ключ имя, значение id кастомного поля
ContactRuleMap map[string]int
Questionid map[int]int `json:"QuestionID"` // ключ id вопроса значение id астомного поля
}
type QuizContact struct {
FormContact struct {
Fields struct {
Name ContactField `json:"name"`
Email ContactField `json:"email"`
Phone ContactField `json:"phone"`
Text ContactField `json:"text"`
Address ContactField `json:"address"`
} `json:"fields"`
} `json:"formContact"`
}
type ContactField struct {
Text string `json:"text"`
InnerText string `json:"innerText"`
Key string `json:"key"`
Required bool `json:"required"`
Used bool `json:"used"`
}
type ContactQuizConfig string
const (
TypeContactName ContactQuizConfig = "name"
TypeContactEmail ContactQuizConfig = "email"
TypeContactPhone ContactQuizConfig = "phone"
TypeContactText ContactQuizConfig = "text"
TypeContactAddress ContactQuizConfig = "address"
)
//type UTM struct {
// /* - айдишник в нашей системе Primary Key*/
// ID int64 `json:"ID"`
// /* - айдишник кастомного поля в амо*/
// Amofieldid int32 `json:"AmoFieldID"`
// /* - айдишник квиза*/
// Quizid int32 `json:"QuizID"`
// /* - связь с аккаунтом в интеграции амо id амо*/
// Accountid int32 `json:"AccountID"`
// /* - название тега в амо*/
// Name string `json:"Name"`
// /* - флаг мягкого удаления*/
// Deleted bool `json:"Deleted"`
// /* - таймштамп создания тега в нашей системе*/
// Createdat int64 `json:"CreatedAt"`
//}
type FieldType string
const (
TypeAmoText FieldType = "text" //Текст
TypeAmoNumeric FieldType = "numeric" //Число
TypeAmoCheckbox FieldType = "checkbox" //Флаг
TypeAmoSelect FieldType = "select" //Список
TypeAmoMultiselect FieldType = "multiselect" //Мультисписок
TypeAmoDate FieldType = "date" //Дата
TypeAmoUrl FieldType = "url" // Ссылка
TypeAmoTextarea FieldType = "textarea" // Текстовая область
TypeAmoRadiobutton FieldType = "radiobutton" // Переключатель
TypeAmoStreetAddress FieldType = "streetaddress" // Короткий адрес
TypeAmoSmartAddress FieldType = "smart_address" // Адрес
TypeAmoBirthday FieldType = "birthday" // День рождения
TypeAmoLegalEntity FieldType = "legal_entity" // Юр. лицо
TypeAmoDateTime FieldType = "date_time" // Дата и время
TypeAmoPrice FieldType = "price" //Цена
TypeAmoCategory FieldType = "category" // Категория
TypeAmoItems FieldType = "items" // Предметы
TypeAmoTrackingData FieldType = "tracking_data" // Отслеживаемые данные
TypeAmoLinkedEntity FieldType = "linked_entity" // Связь с другим элементом
TypeAmoChainedList FieldType = "chained_list" // Каталоги и списки (платная опция Супер-поля)
TypeAmoMonetary FieldType = "monetary" // Денежное (платная опция Супер-поля)
TypeAmoFile FieldType = "file" // Файл
TypeAmoPayer FieldType = "payer" // Плательщик (только в списке Счета-покупки)
TypeAmoSupplier FieldType = "supplier" // Поставщик (только в списке Счета-покупки)
TypeAmoMultiText FieldType = "multitext" // что то чего нет в списке полей но она есть в амо))
)
var TypeMapping = map[string]FieldType{
"variant": TypeAmoText, //TypeAmoChainedList,
"images": TypeAmoText, //TypeAmoFile,
"varimg": TypeAmoText, //TypeAmoFile,
"file": TypeAmoFile,
"text": TypeAmoText,
"emoji": TypeAmoText,
"select": TypeAmoText, //TypeAmoSelect,
"date": TypeAmoText, //TypeAmoDate,
"number": TypeAmoText, //TypeAmoNumeric,
"page": TypeAmoText,
"rating": TypeAmoText,
"result": TypeAmoText,
}
type AmoUsersTrueResults struct {
QuizID int64
AnswerID int64
Result bool
QuestionID int64
Content string
Session string
AccessToken string
AmoAccountID int32
UTMs UTMSavingMap
FieldsRule Fieldsrule
TagsToAdd TagsToAdd
PerformerID int32
StepID int32
PipelineID int32
PerformerName string
SubDomain string
QuizAccountID string
DriveURL string
}
// возможно стоит добавить enum? тип ContactQuizConfig уже есть
type ContactAmo struct {
ID int64
AccountID int32 // id аккаунта в амо к которому привязан контакт
AmoID int32 // id контакта в амо
Field string // значение поля
}