300 lines
12 KiB
Go
300 lines
12 KiB
Go
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 // значение поля
|
||
}
|