diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 49c1eb7..1204a00 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -700,30 +700,21 @@ SELECT *, COUNT(*) OVER() as total_count FROM fields WHERE Deleted = false ORDE WITH user_data AS ( SELECT AmoID FROM users - WHERE AccountID = $1 -- параметр AccountID из токена для получения id аккаунта в амо -), updated_tags AS ( - UPDATE tags - SET name = new_tags.name, color = new_tags.color, createdAt = CURRENT_TIMESTAMP - FROM ( - SELECT t.ID, t.Name, t.Color, t.AmoID - FROM UNNEST($3::entitytype[], $4::varchar(50)[], $5::varchar(50)[]) AS t(ID INT, Name VARCHAR(50), Color VARCHAR(50), AmoID INT) - ) AS new_tags - JOIN user_data ON tags.AccountID = user_data.AmoID - WHERE tags.amoID = $2 - AND tags.amoID = new_tags.amoID - AND tags.accountID = user_data.AmoID -- Используем полученный AmoID из таблицы users - AND tags.entity = $3 - AND tags.deleted = FALSE - RETURNING tags.id, tags.amoID -), inserted_tags AS ( - INSERT INTO tags (amoID, accountID, entity, name, color, createdAt) - SELECT $2, user_data.AmoID, $3, t.Name, t.Color, CURRENT_TIMESTAMP - FROM UNNEST($3::entitytype[], $4::varchar(50)[], $5::varchar(50)[]) AS t(Name VARCHAR(50), Color VARCHAR(50)) - JOIN user_data ON $1 = user_data.AmoID - WHERE (t.Name, t.Color) NOT IN (SELECT name, color FROM updated_tags) - RETURNING id, amoID + WHERE AccountID = $1 ) -SELECT * FROM updated_tags -UNION ALL -SELECT * FROM inserted_tags; +INSERT INTO tags (amoID, accountID, Entity, name, color, createdAt) +SELECT (new_tags->>'Amoid')::INT, + user_data.AmoID, + CAST(new_tags->>'Entity' AS entitytype), + new_tags->>'Name', + new_tags->>'Color', + CURRENT_TIMESTAMP +FROM json_array_elements($2::json[]) AS new_tags + JOIN user_data ON true +ON CONFLICT (amoID, accountID, entity) DO UPDATE + SET name = EXCLUDED.name, + color = EXCLUDED.color, + createdAt = CURRENT_TIMESTAMP +RETURNING *; + diff --git a/dal/schema/000010_init.down.sql b/dal/schema/000010_init.down.sql index 77d693b..e1e3bd4 100644 --- a/dal/schema/000010_init.down.sql +++ b/dal/schema/000010_init.down.sql @@ -1,3 +1,8 @@ +ALTER TABLE pipelines DROP CONSTRAINT IF EXISTS unique_pipeline; +ALTER TABLE steps DROP CONSTRAINT IF EXISTS unique_step; +ALTER TABLE fields DROP CONSTRAINT IF EXISTS unique_field; +ALTER TABLE tags DROP CONSTRAINT IF EXISTS unique_tag; + ALTER TABLE question DROP COLUMN IF EXISTS utm, DROP COLUMN IF EXISTS rules; diff --git a/dal/schema/000010_init.up.sql b/dal/schema/000010_init.up.sql index 07945b8..067b384 100644 --- a/dal/schema/000010_init.up.sql +++ b/dal/schema/000010_init.up.sql @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS users ( Email VARCHAR(50) NOT NULL DEFAULT '', -- почта в амо Role VARCHAR(50) NOT NULL DEFAULT '', -- роль в амо "Group" JSONB, -- вложенная структура так как в амо группы хранятся массивом структур - Deleted BOOLEAN, + Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, Subdomain VARCHAR(50) NOT NULL DEFAULT '', AmoUserID INT NOT NULL , -- id пользователя который подключал интеграцию @@ -27,8 +27,8 @@ CREATE TABLE IF NOT EXISTS pipelines ( AmoID INT NOT NULL , --id воронки в амо AccountID INT NOT NULL , --id аккаунта в амо связь с таблицей users AmoID неявная посредством join Name VARCHAR(50) NOT NULL DEFAULT '', --название воронки в амо - IsArchive BOOLEAN, --флаг архивной воронки в амо - Deleted BOOLEAN, + IsArchive BOOLEAN NOT NULL DEFAULT FALSE, --флаг архивной воронки в амо + Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); @@ -39,7 +39,7 @@ CREATE TABLE IF NOT EXISTS steps ( AccountID INT NOT NULL, --id аккаунта в амо связь с таблицей users AmoID неявная посредством join Name VARCHAR(50) NOT NULL DEFAULT '', --название воронки в амо Color VARCHAR(50) NOT NULL DEFAULT '', --цвет шага в амо* - Deleted BOOLEAN, + Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); @@ -58,7 +58,7 @@ CREATE TABLE IF NOT EXISTS fields ( Name VARCHAR(50) NOT NULL DEFAULT '', -- название воронки в амо Entity EntityType NOT NULL, -- тип сущности в амо, для которой это кастомное поле Type VARCHAR(50) NOT NULL DEFAULT '', -- тип поля - Deleted BOOLEAN, + Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); @@ -69,11 +69,16 @@ CREATE TABLE IF NOT EXISTS tags ( Entity EntityType NOT NULL, -- сущность, к которой принадлежит этот тег Name VARCHAR(50) NOT NULL DEFAULT '', -- название тега в амо Color VARCHAR(50) NOT NULL DEFAULT '', -- цвет тега в амо - Deleted BOOLEAN, + Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE quiz ADD COLUMN utm jsonb NOT NULL DEFAULT '{}'; ALTER TABLE quiz -ADD COLUMN rules jsonb NOT NULL DEFAULT '{}'; \ No newline at end of file +ADD COLUMN rules jsonb NOT NULL DEFAULT '{}'; + +ALTER TABLE pipelines ADD CONSTRAINT unique_pipeline UNIQUE (amoID, accountID); +ALTER TABLE steps ADD CONSTRAINT unique_step UNIQUE (amoID, accountID, PipelineID); +ALTER TABLE fields ADD CONSTRAINT unique_field UNIQUE (amoID, accountID, entity); +ALTER TABLE tags ADD CONSTRAINT unique_tag UNIQUE (amoID, accountID, entity); \ No newline at end of file