update amo queries
This commit is contained in:
parent
1e1d489e43
commit
c2b5e87d2f
@ -686,8 +686,8 @@ RETURNING quiz_id;
|
||||
-- amo methods:
|
||||
|
||||
-- name: CreateAmoAccount :exec
|
||||
INSERT INTO users (AccountID, AmoID, Name, Email, Role, "Group", Deleted, CreatedAt, Subdomain, AmoUserID, Country,DriveURL)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12);
|
||||
INSERT INTO accountsAmo (AccountID, AmoID,Name, Subdomain, Country,DriveURL)
|
||||
VALUES ($1, $2, $3, $4, $5, $6);
|
||||
|
||||
-- name: CreateWebHook :exec
|
||||
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));
|
||||
|
||||
-- name: WebhookDelete :exec
|
||||
WITH userd AS (
|
||||
UPDATE users SET Deleted = true WHERE AmoUserID = $1 RETURNING AccountID
|
||||
WITH companyDel AS (
|
||||
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
|
||||
WITH userd AS (
|
||||
SELECT AmoUserID FROM users WHERE users.AccountID = $1
|
||||
),
|
||||
tokend AS (
|
||||
UPDATE users SET Deleted = true WHERE AmoUserID IN (SELECT AmoUserID FROM userd)
|
||||
WITH amoCompany AS (
|
||||
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1
|
||||
),usersDel AS (
|
||||
UPDATE usersAmo SET Deleted = true WHERE AmoID = (SELECT AmoID FROM amoCompany)
|
||||
),
|
||||
companyDel AS ( UPDATE accountsAmo SET Deleted = true WHERE AmoID = (SELECT AmoID FROM amoCompany)
|
||||
)
|
||||
DELETE FROM tokens WHERE tokens.AccountID = $1;
|
||||
|
||||
-- name: GetCurrentAccount :one
|
||||
SELECT * FROM users WHERE AccountID = $1 AND Deleted = false;
|
||||
-- name: GetCurrentCompany :one
|
||||
SELECT * FROM accountsAmo WHERE AccountID = $1 AND Deleted = false;
|
||||
|
||||
-- name: CheckMainUser :exec
|
||||
UPDATE users SET Name = $1, "Group" = $2, Email = $3, Role = $4 WHERE AmoID = $5;
|
||||
-- name: GetAllCompanyUsers :many
|
||||
SELECT * FROM usersamo WHERE amoid = $2 AND deleted = false;
|
||||
|
||||
-- name: GetUsersWithPagination :many
|
||||
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
|
||||
FROM users u
|
||||
JOIN user_data a ON u.AmoUserID = a.AmoID
|
||||
FROM usersAmo u
|
||||
JOIN user_data a ON u.AmoID = a.AmoID
|
||||
WHERE u.Deleted = false
|
||||
ORDER BY u.ID OFFSET ($2 - 1) * $3 LIMIT $3;
|
||||
|
||||
-- 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
|
||||
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
|
||||
ORDER BY t.ID OFFSET ($2 - 1) * $3 LIMIT $3;
|
||||
|
||||
-- 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
|
||||
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
|
||||
ORDER BY s.ID OFFSET ($2 - 1) * $3 LIMIT $3;
|
||||
|
||||
-- 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
|
||||
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
|
||||
ORDER BY p.ID OFFSET ($2 - 1) * $3 LIMIT $3;
|
||||
|
||||
-- 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
|
||||
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
|
||||
ORDER BY f.ID OFFSET ($2 - 1) * $3 LIMIT $3;
|
||||
|
||||
@ -796,9 +812,7 @@ WHERE f.amoID = (update_data ->> 'AmoID')::INT
|
||||
|
||||
-- name: CheckTags :many
|
||||
WITH user_data AS (
|
||||
SELECT AmoID
|
||||
FROM users
|
||||
WHERE users.AccountID = $1
|
||||
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
|
||||
), new_tags AS (
|
||||
SELECT (tag->>'AmoID')::INT AS amoID,
|
||||
(tag->>'Entity')::entitytype AS Entity,
|
||||
@ -857,9 +871,7 @@ WHERE NOT EXISTS (
|
||||
|
||||
-- name: CheckFields :many
|
||||
WITH user_data AS (
|
||||
SELECT AmoID
|
||||
FROM users
|
||||
WHERE users.AccountID = $1
|
||||
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
|
||||
), new_fields AS (
|
||||
SELECT (field->>'AmoID')::INT AS amoID,
|
||||
COALESCE(field->>'Code', '')::varchar(255) AS code,
|
||||
@ -930,13 +942,13 @@ SELECT * FROM rules WHERE QuizID = $1 AND Deleted = false;
|
||||
-- name: SetQuizSettings :one
|
||||
INSERT INTO rules (AccountID, QuizID, PerformerID, PipelineID, StepID, FieldsRule,TagsToAdd)
|
||||
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;
|
||||
|
||||
-- name: ChangeQuizSettings :one
|
||||
UPDATE rules
|
||||
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;
|
||||
|
||||
-- name: GetQuestionListByIDs :many
|
||||
@ -944,48 +956,15 @@ SELECT * FROM question WHERE id = ANY($1::int[]) AND deleted = FALSE;
|
||||
|
||||
-- name: UpdateFieldRules :exec
|
||||
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
|
||||
UPDATE users AS u
|
||||
SET Name = (update_data ->> 'Name')::varchar(512),
|
||||
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: UpdateAmoAccountUser :exec
|
||||
UPDATE usersAmo SET Name = $3, Email = $4, Role = $5, "Group" = $6
|
||||
WHERE AmoID = $1 AND AmoUserID = $2 AND deleted = false;
|
||||
|
||||
-- name: CheckUsers :many
|
||||
WITH new_users AS (
|
||||
SELECT (u->>'AmocrmID')::INT AS AmoID,
|
||||
(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: AddAmoAccountUser :exec
|
||||
INSERT INTO usersAmo (AmoID, AmoUserID, Name, Email, Role, "Group", Deleted, CreatedAt)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8);
|
||||
|
||||
-- name: GettingAmoUsersTrueResults :many
|
||||
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
|
||||
WHERE a2.start = true AND a2.session = a.session
|
||||
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
|
||||
INNER JOIN quiz q ON a.quiz_id = q.id
|
||||
LEFT JOIN amoCRMStatuses s ON a.id = s.AnswerID
|
||||
INNER JOIN rules r ON q.id = r.QuizID
|
||||
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
|
||||
AND s.id IS NULL
|
||||
AND a.deleted = false
|
||||
@ -1011,12 +990,12 @@ WHERE a.result = true
|
||||
INSERT INTO amoCRMStatuses (AccountID, DealID, AnswerID, Status)
|
||||
SELECT u.AmoID, $1, $2, $3
|
||||
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;
|
||||
|
||||
-- name: UpdatingDealAmoStatus :exec
|
||||
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
|
||||
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[]);
|
||||
|
||||
-- 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
|
||||
SELECT ID,AmoID,AccountID,Name,Entity,Color
|
||||
@ -1049,9 +1028,7 @@ FROM pipelines
|
||||
WHERE AccountID = $1 AND Deleted = false;
|
||||
|
||||
-- name: GetUserUsersByID :many
|
||||
SELECT ID,AccountID,AmoID,Name,Email,Role,"Group",Subdomain,AmoUserID,Country
|
||||
FROM users
|
||||
WHERE AmoUserID = $1 AND Deleted = false;
|
||||
SELECT * FROM usersAmo WHERE amoid = $1 AND Deleted = false;
|
||||
|
||||
-- name: GetFieldByAmoID :one
|
||||
SELECT * FROM fields WHERE AmoID = $1 AND Deleted = false;
|
||||
|
||||
@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS accountsAmo (
|
||||
AmoID INT NOT NULL, -- ID "компании" в амо
|
||||
Name VARCHAR(512) NOT NULL DEFAULT '',
|
||||
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
|
||||
Country VARCHAR(50) NOT NULL DEFAULT '',
|
||||
DriveURL VARCHAR(255) DEFAULT '' -- URL объктного хранилища
|
||||
@ -24,6 +24,5 @@ CREATE TABLE IF NOT EXISTS usersAmo (
|
||||
Role INT NOT NULL DEFAULT 0,
|
||||
"Group" INT NOT NULL DEFAULT 0,
|
||||
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (AmoID) REFERENCES accountsAmo(AmoID)
|
||||
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
51
model/amo.go
51
model/amo.go
@ -1,32 +1,29 @@
|
||||
package model
|
||||
|
||||
type User struct {
|
||||
/* - айдишник в нашей системе Primary Key*/
|
||||
ID int64 `json:"ID"`
|
||||
/* - id пользователя из токена в нашей системе*/
|
||||
Accountid string `json:"AccountID"`
|
||||
/* - айдишник пользователя в амо*/
|
||||
AmoID int32 `json:"AmocrmID"`
|
||||
/* - имя аккаунта в амо*/
|
||||
Name string `json:"Name"`
|
||||
/* - почта пользователя из амо*/
|
||||
Email string `json:"Email"`
|
||||
/* - роль пользователя в амо*/
|
||||
Role int32 `json:"Role"`
|
||||
/* - группы пользователя в амо*/
|
||||
Group int32 `json:"Group"`
|
||||
/* - флаг мягкого удаления*/
|
||||
Deleted bool `json:"Deleted"`
|
||||
/* - таймштамп создания аккаунта*/
|
||||
Createdat int64 `json:"CreatedAt"`
|
||||
/* - поддомен организации в амо*/
|
||||
Subdomain string `json:"Subdomain"`
|
||||
/* - айдишник пользвателя, который подключал интеграцию*/
|
||||
Amouserid int32 `json:"AmoUserID"`
|
||||
/* - страна указанная в настройках амо*/
|
||||
Country string `json:"Country"`
|
||||
// урл объектного хранилища пользователя в амо
|
||||
DriveURL string `json:"DriveURL"`
|
||||
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 объктного хранилища
|
||||
}
|
||||
|
||||
type UserGroups struct {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user