update amo queries

This commit is contained in:
Pavel 2024-06-12 16:26:49 +03:00
parent 1e1d489e43
commit c2b5e87d2f
3 changed files with 82 additions and 109 deletions

@ -686,8 +686,8 @@ RETURNING quiz_id;
-- amo methods: -- amo methods:
-- name: CreateAmoAccount :exec -- name: CreateAmoAccount :exec
INSERT INTO users (AccountID, AmoID, Name, Email, Role, "Group", Deleted, CreatedAt, Subdomain, AmoUserID, Country,DriveURL) INSERT INTO accountsAmo (AccountID, AmoID,Name, Subdomain, Country,DriveURL)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12); VALUES ($1, $2, $3, $4, $5, $6);
-- name: CreateWebHook :exec -- name: CreateWebHook :exec
INSERT INTO tokens (AccountID, RefreshToken, AccessToken, AuthCode, Expiration, CreatedAt) INSERT INTO tokens (AccountID, RefreshToken, AccessToken, AuthCode, Expiration, CreatedAt)
@ -704,57 +704,73 @@ SELECT * FROM tokens;
SELECT * FROM tokens WHERE Expiration <= TO_TIMESTAMP(EXTRACT(EPOCH FROM NOW()) + (10 * 60)); SELECT * FROM tokens WHERE Expiration <= TO_TIMESTAMP(EXTRACT(EPOCH FROM NOW()) + (10 * 60));
-- name: WebhookDelete :exec -- name: WebhookDelete :exec
WITH userd AS ( WITH companyDel AS (
UPDATE users SET Deleted = true WHERE AmoUserID = $1 RETURNING AccountID UPDATE accountsAmo SET Deleted = true WHERE AmoID = $1 RETURNING AccountID
),
userDel AS (
UPDATE usersAmo SET Deleted = true WHERE AmoID = $1
) )
DELETE FROM tokens WHERE AccountID IN (SELECT AccountID FROM userd); DELETE FROM tokens WHERE AccountID IN (SELECT AccountID FROM companyDel);
-- name: SoftDeleteAccount :exec -- name: SoftDeleteAccount :exec
WITH userd AS ( WITH amoCompany AS (
SELECT AmoUserID FROM users WHERE users.AccountID = $1 SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1
), ),usersDel AS (
tokend AS ( UPDATE usersAmo SET Deleted = true WHERE AmoID = (SELECT AmoID FROM amoCompany)
UPDATE users SET Deleted = true WHERE AmoUserID IN (SELECT AmoUserID FROM userd) ),
) companyDel AS ( UPDATE accountsAmo SET Deleted = true WHERE AmoID = (SELECT AmoID FROM amoCompany)
)
DELETE FROM tokens WHERE tokens.AccountID = $1; DELETE FROM tokens WHERE tokens.AccountID = $1;
-- name: GetCurrentAccount :one -- name: GetCurrentCompany :one
SELECT * FROM users WHERE AccountID = $1 AND Deleted = false; SELECT * FROM accountsAmo WHERE AccountID = $1 AND Deleted = false;
-- name: CheckMainUser :exec -- name: GetAllCompanyUsers :many
UPDATE users SET Name = $1, "Group" = $2, Email = $3, Role = $4 WHERE AmoID = $5; SELECT * FROM usersamo WHERE amoid = $2 AND deleted = false;
-- name: GetUsersWithPagination :many -- name: GetUsersWithPagination :many
WITH user_data AS ( WITH user_data AS (
SELECT AmoID FROM users WHERE users.AccountID = $1 AND Deleted = false SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
) )
SELECT u.*, COUNT(*) OVER() as total_count SELECT u.*, COUNT(*) OVER() as total_count
FROM users u FROM usersAmo u
JOIN user_data a ON u.AmoUserID = a.AmoID JOIN user_data a ON u.AmoID = a.AmoID
WHERE u.Deleted = false WHERE u.Deleted = false
ORDER BY u.ID OFFSET ($2 - 1) * $3 LIMIT $3; ORDER BY u.ID OFFSET ($2 - 1) * $3 LIMIT $3;
-- name: GetTagsWithPagination :many -- name: GetTagsWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT t.*, COUNT(*) OVER() as total_count SELECT t.*, COUNT(*) OVER() as total_count
FROM tags t JOIN (SELECT AmoID FROM users WHERE users.AccountID = $1 AND Deleted = false) u ON t.AccountID = u.AmoID FROM tags t JOIN user_data u ON t.AccountID = u.AmoID
WHERE t.Deleted = false WHERE t.Deleted = false
ORDER BY t.ID OFFSET ($2 - 1) * $3 LIMIT $3; ORDER BY t.ID OFFSET ($2 - 1) * $3 LIMIT $3;
-- name: GetStepsWithPagination :many -- name: GetStepsWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT s.*, COUNT(*) OVER() as total_count SELECT s.*, COUNT(*) OVER() as total_count
FROM steps s JOIN (SELECT AmoID FROM users WHERE users.AccountID = $1 AND Deleted = false) u ON s.AccountID = u.AmoID FROM steps s JOIN user_data u ON s.AccountID = u.AmoID
WHERE s.Deleted = false AND PipelineID = $4 WHERE s.Deleted = false AND PipelineID = $4
ORDER BY s.ID OFFSET ($2 - 1) * $3 LIMIT $3; ORDER BY s.ID OFFSET ($2 - 1) * $3 LIMIT $3;
-- name: GetPipelinesWithPagination :many -- name: GetPipelinesWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT p.*, COUNT(*) OVER() as total_count SELECT p.*, COUNT(*) OVER() as total_count
FROM pipelines p JOIN (SELECT AmoID FROM users WHERE users.AccountID = $1 AND Deleted = false) u ON p.AccountID = u.AmoID FROM pipelines p JOIN user_data u ON p.AccountID = u.AmoID
WHERE p.Deleted = false WHERE p.Deleted = false
ORDER BY p.ID OFFSET ($2 - 1) * $3 LIMIT $3; ORDER BY p.ID OFFSET ($2 - 1) * $3 LIMIT $3;
-- name: GetFieldsWithPagination :many -- name: GetFieldsWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT f.*, COUNT(*) OVER() as total_count SELECT f.*, COUNT(*) OVER() as total_count
FROM fields f JOIN (SELECT AmoID FROM users WHERE users.AccountID = $1 AND Deleted = false) u ON f.AccountID = u.AmoID FROM fields f JOIN user_data u ON f.AccountID = u.AmoID
WHERE f.Deleted = false WHERE f.Deleted = false
ORDER BY f.ID OFFSET ($2 - 1) * $3 LIMIT $3; ORDER BY f.ID OFFSET ($2 - 1) * $3 LIMIT $3;
@ -796,9 +812,7 @@ WHERE f.amoID = (update_data ->> 'AmoID')::INT
-- name: CheckTags :many -- name: CheckTags :many
WITH user_data AS ( WITH user_data AS (
SELECT AmoID SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
FROM users
WHERE users.AccountID = $1
), new_tags AS ( ), new_tags AS (
SELECT (tag->>'AmoID')::INT AS amoID, SELECT (tag->>'AmoID')::INT AS amoID,
(tag->>'Entity')::entitytype AS Entity, (tag->>'Entity')::entitytype AS Entity,
@ -857,9 +871,7 @@ WHERE NOT EXISTS (
-- name: CheckFields :many -- name: CheckFields :many
WITH user_data AS ( WITH user_data AS (
SELECT AmoID SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
FROM users
WHERE users.AccountID = $1
), new_fields AS ( ), new_fields AS (
SELECT (field->>'AmoID')::INT AS amoID, SELECT (field->>'AmoID')::INT AS amoID,
COALESCE(field->>'Code', '')::varchar(255) AS code, COALESCE(field->>'Code', '')::varchar(255) AS code,
@ -930,13 +942,13 @@ SELECT * FROM rules WHERE QuizID = $1 AND Deleted = false;
-- name: SetQuizSettings :one -- name: SetQuizSettings :one
INSERT INTO rules (AccountID, QuizID, PerformerID, PipelineID, StepID, FieldsRule,TagsToAdd) INSERT INTO rules (AccountID, QuizID, PerformerID, PipelineID, StepID, FieldsRule,TagsToAdd)
SELECT u.AmoID AS AccountID,$1 AS QuizID,$2 AS PerformerID,$3 AS PipelineID, SELECT u.AmoID AS AccountID,$1 AS QuizID,$2 AS PerformerID,$3 AS PipelineID,
$4 AS StepID,$5 AS FieldsRule,$6 AS TagsToAdd FROM users u WHERE u.AccountID = $7 AND u.Deleted = false $4 AS StepID,$5 AS FieldsRule,$6 AS TagsToAdd FROM accountsamo u WHERE u.AccountID = $7 AND u.Deleted = false
RETURNING id; RETURNING id;
-- name: ChangeQuizSettings :one -- name: ChangeQuizSettings :one
UPDATE rules UPDATE rules
SET PerformerID = $1,PipelineID = $2,StepID = $3,FieldsRule = $4, TagsToAdd=$5 SET PerformerID = $1,PipelineID = $2,StepID = $3,FieldsRule = $4, TagsToAdd=$5
WHERE AccountID = (SELECT AmoID FROM users WHERE users.AccountID = $6 AND users.Deleted = false) AND QuizID = $7 AND Deleted = false WHERE AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $6 AND accountsAmo.Deleted = false) AND QuizID = $7 AND Deleted = false
RETURNING id; RETURNING id;
-- name: GetQuestionListByIDs :many -- name: GetQuestionListByIDs :many
@ -944,48 +956,15 @@ SELECT * FROM question WHERE id = ANY($1::int[]) AND deleted = FALSE;
-- name: UpdateFieldRules :exec -- name: UpdateFieldRules :exec
UPDATE rules SET FieldsRule = $1 UPDATE rules SET FieldsRule = $1
WHERE AccountID = (SELECT AmoID FROM users WHERE users.AccountID = $2 AND users.Deleted = false) AND QuizID = $3 AND Deleted = false; WHERE AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $2 AND accountsAmo.Deleted = false) AND QuizID = $3 AND Deleted = false;
-- name: UpdateUsers :exec -- name: UpdateAmoAccountUser :exec
UPDATE users AS u UPDATE usersAmo SET Name = $3, Email = $4, Role = $5, "Group" = $6
SET Name = (update_data ->> 'Name')::varchar(512), WHERE AmoID = $1 AND AmoUserID = $2 AND deleted = false;
Email = (update_data ->> 'Email')::varchar(50),
Role = (update_data ->> 'Role')::INT,
"Group" = (update_data ->> 'Group')::INT,
AmoUserID= (update_data ->> 'AmoUserID')::INT
FROM json_array_elements($1::json) AS update_data
WHERE u.AmoID = (update_data ->> 'AmocrmID')::INT;
-- name: CheckUsers :many -- name: AddAmoAccountUser :exec
WITH new_users AS ( INSERT INTO usersAmo (AmoID, AmoUserID, Name, Email, Role, "Group", Deleted, CreatedAt)
SELECT (u->>'AmocrmID')::INT AS AmoID, VALUES ($1, $2, $3, $4, $5, $6, $7, $8);
(u->>'Name')::VARCHAR(512) AS Name,
(u->>'Group')::INT AS "Group",
(u->>'Role')::INT AS Role,
(u->>'Email')::VARCHAR(50) AS Email,
(u->>'AmoUserID')::INT AS AmoUserID,
CURRENT_TIMESTAMP AS createdAt
FROM json_array_elements($1::json) AS u
), inserted_users AS (
INSERT INTO users (AmoID, Name, "Group", Role, Email, AmoUserID,createdAt)
SELECT nu.AmoID,
nu.Name,
nu."Group",
nu.Role,
nu.Email,
nu.AmoUserID,
nu.createdAt
FROM new_users nu
ON CONFLICT (amoID) DO NOTHING
RETURNING *
)
SELECT nu.*
FROM new_users nu
WHERE NOT EXISTS (
SELECT *
FROM inserted_users ins
WHERE ins.amoID = nu.amoID
);
-- name: GettingAmoUsersTrueResults :many -- name: GettingAmoUsersTrueResults :many
SELECT a.quiz_id,a.id,a.result,a.question_id,a.content,a.session, SELECT a.quiz_id,a.id,a.result,a.question_id,a.content,a.session,
@ -993,13 +972,13 @@ SELECT a.quiz_id,a.id,a.result,a.question_id,a.content,a.session,
FROM answer a2 FROM answer a2
WHERE a2.start = true AND a2.session = a.session WHERE a2.start = true AND a2.session = a.session
LIMIT 1) AS utm LIMIT 1) AS utm
,t.accesstoken,r.accountid,r.fieldsrule,r.tagstoadd,r.performerid,r.stepid,r.pipelineid,(SELECT u.name FROM users u WHERE u.amoid = r.performerid) AS performer_name,u.subdomain,u.accountid,u.driveurl ,t.accesstoken,r.accountid,r.fieldsrule,r.tagstoadd,r.performerid,r.stepid,r.pipelineid,(SELECT u.name FROM usersAmo u WHERE u.AmoUserID = r.performerid) AS performer_name,u.subdomain,u.accountid,u.driveurl
FROM answer a FROM answer a
INNER JOIN quiz q ON a.quiz_id = q.id INNER JOIN quiz q ON a.quiz_id = q.id
LEFT JOIN amoCRMStatuses s ON a.id = s.AnswerID LEFT JOIN amoCRMStatuses s ON a.id = s.AnswerID
INNER JOIN rules r ON q.id = r.QuizID INNER JOIN rules r ON q.id = r.QuizID
INNER JOIN tokens t ON q.accountid = t.AccountID INNER JOIN tokens t ON q.accountid = t.AccountID
INNER JOIN users u ON q.accountid = u.accountid AND u.amoid = r.accountid INNER JOIN accountsAmo u ON q.accountid = u.accountid AND u.amoid = r.accountid
WHERE a.result = true WHERE a.result = true
AND s.id IS NULL AND s.id IS NULL
AND a.deleted = false AND a.deleted = false
@ -1011,12 +990,12 @@ WHERE a.result = true
INSERT INTO amoCRMStatuses (AccountID, DealID, AnswerID, Status) INSERT INTO amoCRMStatuses (AccountID, DealID, AnswerID, Status)
SELECT u.AmoID, $1, $2, $3 SELECT u.AmoID, $1, $2, $3
FROM tokens AS t FROM tokens AS t
JOIN users AS u ON t.AccountID = u.AccountID JOIN accountsAmo AS u ON t.AccountID = u.AccountID
WHERE t.AccessToken = $4 AND u.Deleted = false; WHERE t.AccessToken = $4 AND u.Deleted = false;
-- name: UpdatingDealAmoStatus :exec -- name: UpdatingDealAmoStatus :exec
UPDATE amoCRMStatuses SET Status = $1 UPDATE amoCRMStatuses SET Status = $1
WHERE DealID = $2 AND AccountID = (SELECT u.AmoID FROM tokens AS t JOIN users AS u ON t.AccountID = u.AccountID WHERE t.AccessToken = $3 AND u.Deleted = false); WHERE DealID = $2 AND AccountID = (SELECT u.AmoID FROM tokens AS t JOIN accountsAmo AS u ON t.AccountID = u.AccountID WHERE t.AccessToken = $3 AND u.Deleted = false);
-- name: DeleteFields :exec -- name: DeleteFields :exec
UPDATE fields SET Deleted = true WHERE ID = ANY($1::bigint[]); UPDATE fields SET Deleted = true WHERE ID = ANY($1::bigint[]);
@ -1031,7 +1010,7 @@ UPDATE steps SET Deleted = true WHERE ID = ANY($1::bigint[]);
UPDATE pipelines SET Deleted = true WHERE ID = ANY($1::bigint[]); UPDATE pipelines SET Deleted = true WHERE ID = ANY($1::bigint[]);
-- name: DeleteUsers :exec -- name: DeleteUsers :exec
UPDATE users SET Deleted = true WHERE ID = ANY($1::bigint[]); UPDATE usersAmo SET Deleted = true WHERE ID = ANY($1::bigint[]);
-- name: GetUserTagsByID :many -- name: GetUserTagsByID :many
SELECT ID,AmoID,AccountID,Name,Entity,Color SELECT ID,AmoID,AccountID,Name,Entity,Color
@ -1049,9 +1028,7 @@ FROM pipelines
WHERE AccountID = $1 AND Deleted = false; WHERE AccountID = $1 AND Deleted = false;
-- name: GetUserUsersByID :many -- name: GetUserUsersByID :many
SELECT ID,AccountID,AmoID,Name,Email,Role,"Group",Subdomain,AmoUserID,Country SELECT * FROM usersAmo WHERE amoid = $1 AND Deleted = false;
FROM users
WHERE AmoUserID = $1 AND Deleted = false;
-- name: GetFieldByAmoID :one -- name: GetFieldByAmoID :one
SELECT * FROM fields WHERE AmoID = $1 AND Deleted = false; SELECT * FROM fields WHERE AmoID = $1 AND Deleted = false;

@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS accountsAmo (
AmoID INT NOT NULL, -- ID "компании" в амо AmoID INT NOT NULL, -- ID "компании" в амо
Name VARCHAR(512) NOT NULL DEFAULT '', Name VARCHAR(512) NOT NULL DEFAULT '',
Deleted BOOLEAN NOT NULL DEFAULT FALSE, Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
Subdomain VARCHAR(50) NOT NULL DEFAULT '', -- поддомен - пример https://penadigitaltech.amocrm.ru Subdomain VARCHAR(50) NOT NULL DEFAULT '', -- поддомен - пример https://penadigitaltech.amocrm.ru
Country VARCHAR(50) NOT NULL DEFAULT '', Country VARCHAR(50) NOT NULL DEFAULT '',
DriveURL VARCHAR(255) DEFAULT '' -- URL объктного хранилища DriveURL VARCHAR(255) DEFAULT '' -- URL объктного хранилища
@ -24,6 +24,5 @@ CREATE TABLE IF NOT EXISTS usersAmo (
Role INT NOT NULL DEFAULT 0, Role INT NOT NULL DEFAULT 0,
"Group" INT NOT NULL DEFAULT 0, "Group" INT NOT NULL DEFAULT 0,
Deleted BOOLEAN NOT NULL DEFAULT FALSE, Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
FOREIGN KEY (AmoID) REFERENCES accountsAmo(AmoID)
); );

@ -1,32 +1,29 @@
package model package model
type User struct { import "time"
/* - айдишник в нашей системе Primary Key*/
ID int64 `json:"ID"` type AmoAccountUser struct {
/* - id пользователя из токена в нашей системе*/ ID int64 `json:"id"` // ID пользователя
Accountid string `json:"AccountID"` AmoID int32 `json:"amoID"` // ID компании в амо, к которой пользователь принадлежит
/* - айдишник пользователя в амо*/ AmoUserID int32 `json:"amoUserID"` // ID пользователя в амо
AmoID int32 `json:"AmocrmID"` Name string `json:"name"` // Имя
/* - имя аккаунта в амо*/ Email string `json:"email"` // Email
Name string `json:"Name"` Role int32 `json:"role"` // Роль
/* - почта пользователя из амо*/ Group int32 `json:"group"` // Группа
Email string `json:"Email"` Deleted bool `json:"deleted"`
/* - роль пользователя в амо*/ CreatedAt time.Time `json:"createdAt"`
Role int32 `json:"Role"` }
/* - группы пользователя в амо*/
Group int32 `json:"Group"` type AmoAccount struct {
/* - флаг мягкого удаления*/ ID int64 `json:"id"` // ID компании
Deleted bool `json:"Deleted"` AccountID string `json:"accountID"` // ID аккаунта нас
/* - таймштамп создания аккаунта*/ AmoID int32 `json:"amoID"` // ID компании в амо
Createdat int64 `json:"CreatedAt"` Name string `json:"name"` // Название
/* - поддомен организации в амо*/ Deleted bool `json:"deleted"`
Subdomain string `json:"Subdomain"` CreatedAt time.Time `json:"createdAt"`
/* - айдишник пользвателя, который подключал интеграцию*/ Subdomain string `json:"subdomain"` // поддомен
Amouserid int32 `json:"AmoUserID"` Country string `json:"country"` // Страна
/* - страна указанная в настройках амо*/ DriveURL string `json:"driveURL"` // URL объктного хранилища
Country string `json:"Country"`
// урл объектного хранилища пользователя в амо
DriveURL string `json:"DriveURL"`
} }
type UserGroups struct { type UserGroups struct {