diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index f3af91c..ea8a617 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -761,7 +761,7 @@ WHERE s.amoID = (update_data ->> 'AmoID')::INT UPDATE fields AS f SET name = (update_data ->> 'Name')::varchar(50), code = (update_data ->> 'Code')::varchar(255), - type = (update_data ->> 'Type')::varchar(50), + type = (update_data ->> 'Type')::fieldtype, createdAt = CURRENT_TIMESTAMP FROM json_array_elements($1::json) AS update_data WHERE f.amoID = (update_data ->> 'AmoID')::INT @@ -839,7 +839,7 @@ WITH user_data AS ( COALESCE(field->>'Code', '')::varchar(255) AS code, COALESCE(field->>'Name', '')::varchar(50) AS name, CAST(field->>'Entity' AS entitytype) AS Entity, - COALESCE(field->>'Type', '')::varchar(50) AS type, + COALESCE(field->>'Type', '')::fieldtype AS type, CURRENT_TIMESTAMP AS createdAt FROM json_array_elements($2::json) AS field ), inserted_fields AS( diff --git a/dal/schema/000010_init.down.sql b/dal/schema/000010_init.down.sql index 4b044b7..8316b7a 100644 --- a/dal/schema/000010_init.down.sql +++ b/dal/schema/000010_init.down.sql @@ -13,8 +13,15 @@ DO $$ BEGIN IF EXISTS (SELECT 1 FROM pg_type WHERE typname = 'entitytype') THEN DROP TYPE EntityType; - END IF; - END $$; + END IF; +END $$; + +DO $$ + BEGIN + IF EXISTS (SELECT 1 FROM pg_type WHERE typname = 'fieldtype') THEN + DROP TYPE FieldType; + END IF; +END $$; DROP TABLE IF EXISTS steps; DROP TABLE IF EXISTS pipelines; diff --git a/dal/schema/000010_init.up.sql b/dal/schema/000010_init.up.sql index fff445f..c106296 100644 --- a/dal/schema/000010_init.up.sql +++ b/dal/schema/000010_init.up.sql @@ -42,7 +42,6 @@ CREATE TABLE IF NOT EXISTS steps ( Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'entitytype') THEN @@ -50,6 +49,13 @@ DO $$ END IF; END $$; +DO $$ + BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'fieldtype') THEN + CREATE TYPE FieldType AS ENUM ('text', 'numeric', 'checkbox', 'select', 'multiselect', 'date', 'url', 'textarea', 'radiobutton', 'streetaddress', 'smart_address', 'birthday', 'legal_entity', 'date_time', 'price', 'category', 'items', 'tracking_data', 'linked_entity', 'chained_list', 'monetary', 'file', 'payer', 'supplier'); + END IF; +END $$; + CREATE TABLE IF NOT EXISTS fields ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, AmoID INT NOT NULL, -- айдишник кастомного поля в амо @@ -57,7 +63,7 @@ CREATE TABLE IF NOT EXISTS fields ( AccountID INT NOT NULL, -- id аккаунта в амо связь с таблицей users AmoID неявная посредством join Name VARCHAR(50) NOT NULL DEFAULT '', -- название воронки в амо Entity EntityType NOT NULL, -- тип сущности в амо, для которой это кастомное поле - Type VARCHAR(50) NOT NULL DEFAULT '', -- тип поля + Type FieldType NOT NULL DEFAULT '', -- тип поля Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); diff --git a/model/amo.go b/model/amo.go index 54aba09..5208464 100644 --- a/model/amo.go +++ b/model/amo.go @@ -111,7 +111,7 @@ type Field struct { /* - тип сущности в амо, для которой это кастомное поле*/ 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 string `json:"Type"` + Type FieldType `json:"Type"` /* - флаг мягкого удаления*/ Deleted bool `json:"Deleted"` /* - таймштамп создания воронки в нашей системе*/ @@ -178,3 +178,32 @@ type UTM struct { /* - таймштамп создания тега в нашей системе*/ 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" // Поставщик (только в списке Счета-покупки) +)