From ae01145ce6ab758106353cd6e09fa32c00e356a2 Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 18 Apr 2024 12:16:25 +0300 Subject: [PATCH] add query check tags --- dal/db_query/queries.sql | 46 ++++++++++++++++++++++++++++++++++- dal/schema/000010_init.up.sql | 4 +-- repository/amo/amo.go | 4 +-- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 979c351..49c1eb7 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -667,7 +667,7 @@ UPDATE tokens SET AccessToken = $1, RefreshToken = $2, Expiration = $3, CreatedA SELECT * FROM tokens; -- name: CheckExpired :many -SELECT * FROM tokens WHERE Expiration <= EXTRACT(EPOCH FROM NOW()) + (10 * 60); +SELECT * FROM tokens WHERE Expiration <= TO_TIMESTAMP(EXTRACT(EPOCH FROM NOW()) + (10 * 60)); -- name: WebhookDelete :exec DELETE FROM tokens WHERE AccountID = $1; @@ -683,3 +683,47 @@ UPDATE users SET Name = $1, "Group" = $2, Email = $3, Role = $4 WHERE AmoID = $5 -- name: GetUsersWithPagination :many SELECT *, COUNT(*) OVER() as total_count FROM users WHERE Deleted = false ORDER BY ID OFFSET ($1 - 1) * $2 LIMIT $2; + +-- name: GetTagsWithPagination :many +SELECT *, COUNT(*) OVER() as total_count FROM tags WHERE Deleted = false ORDER BY ID OFFSET ($1 - 1) * $2 LIMIT $2; + +-- name: GetStepsWithPagination :many +SELECT *, COUNT(*) OVER() as total_count FROM steps WHERE Deleted = false ORDER BY ID OFFSET ($1 - 1) * $2 LIMIT $2; + +-- name: GetPipelinesWithPagination :many +SELECT *, COUNT(*) OVER() as total_count FROM pipelines WHERE Deleted = false ORDER BY ID OFFSET ($1 - 1) * $2 LIMIT $2; + +-- name: GetFieldsWithPagination :many +SELECT *, COUNT(*) OVER() as total_count FROM fields WHERE Deleted = false ORDER BY ID OFFSET ($1 - 1) * $2 LIMIT $2; + +-- name: CheckTags :many +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 +) +SELECT * FROM updated_tags +UNION ALL +SELECT * FROM inserted_tags; + diff --git a/dal/schema/000010_init.up.sql b/dal/schema/000010_init.up.sql index 9cf27bd..07945b8 100644 --- a/dal/schema/000010_init.up.sql +++ b/dal/schema/000010_init.up.sql @@ -73,7 +73,7 @@ CREATE TABLE IF NOT EXISTS tags ( CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -ALTER TABLE question +ALTER TABLE quiz ADD COLUMN utm jsonb NOT NULL DEFAULT '{}'; -ALTER TABLE question +ALTER TABLE quiz ADD COLUMN rules jsonb NOT NULL DEFAULT '{}'; \ No newline at end of file diff --git a/repository/amo/amo.go b/repository/amo/amo.go index 2986b90..4564d5d 100644 --- a/repository/amo/amo.go +++ b/repository/amo/amo.go @@ -175,7 +175,7 @@ func (r *AmoRepository) WebhookCreate(ctx context.Context, tokens model.Token) e Refreshtoken: tokens.RefreshToken, Accesstoken: tokens.AccessToken, Authcode: tokens.AuthCode, - Expiration: time.Unix(tokens.Expiration, 0), + Expiration: time.Unix(tokens.Expiration, 0).In(time.UTC), Createdat: sql.NullTime{Time: time.Unix(tokens.CreatedAt, 0), Valid: true}, }) @@ -191,7 +191,7 @@ func (r *AmoRepository) WebhookUpdate(ctx context.Context, tokens model.Token) e Accountid: tokens.AccountID, Accesstoken: tokens.AccessToken, Refreshtoken: tokens.RefreshToken, - Expiration: time.Unix(tokens.Expiration, 0), + Expiration: time.Unix(tokens.Expiration, 0).In(time.UTC), Createdat: sql.NullTime{Time: time.Unix(tokens.CreatedAt, 0), Valid: true}, })