Merge branch 'usersSeparate' into 'main'

Users separate

See merge request backend/quiz/common!26
This commit is contained in:
Mikhail 2024-06-12 17:34:33 +00:00
commit e3e07c8869
9 changed files with 358 additions and 408 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 accountsAmo.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 = $1 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")
SELECT (u->>'AmocrmID')::INT AS AmoID, VALUES ($1, $2, $3, $4, $5, $6);
(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;
@ -1064,4 +1041,4 @@ WHERE AccountID = $1 AND Deleted = false;
-- name: DecrementManual :one -- name: DecrementManual :one
UPDATE privileges p SET amount = amount - 1 FROM account a UPDATE privileges p SET amount = amount - 1 FROM account a
WHERE p.account_id = a.id AND a.user_id = $1 AND p.privilegeID = $2 AND p.amount > 0 WHERE p.account_id = a.id AND a.user_id = $1 AND p.privilegeID = $2 AND p.amount > 0
RETURNING p.id, p.privilegeID, p.account_id, p.privilege_name, p.amount, p.created_at;; RETURNING p.id, p.privilegeID, p.account_id, p.privilege_name, p.amount, p.created_at;

@ -0,0 +1,20 @@
DROP TABLE IF EXISTS usersAmo;
DROP INDEX IF EXISTS idx_unique_accountsAmo;
DROP TABLE IF EXISTS accountsAmo;
CREATE TABLE IF NOT EXISTS users (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(30) NOT NULL DEFAULT '', -- id квизе из токена
AmoID INT NOT NULL , -- id в амо
Name VARCHAR(512) NOT NULL DEFAULT '', -- имя в амо
Email VARCHAR(50) NOT NULL DEFAULT '', -- почта в амо
Role INT NOT NULL DEFAULT 0, -- роль в амо
"Group" INT NOT NULL DEFAULT 0, -- вложенная структура так как в амо группы хранятся массивом структур
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
Subdomain VARCHAR(50) NOT NULL DEFAULT '',
AmoUserID INT NOT NULL , -- id пользователя который подключал интеграцию
Country VARCHAR(50) NOT NULL DEFAULT '' -- страна в амо
);
CREATE UNIQUE INDEX idx_unique_users ON users (amoID) WHERE Deleted = false;

@ -0,0 +1,28 @@
DROP TABLE IF EXISTS users;
DROP INDEX IF EXISTS idx_unique_users;
CREATE TABLE IF NOT EXISTS accountsAmo (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(30) NOT NULL DEFAULT '', -- ID аккаунта у нас
AmoID INT NOT NULL, -- ID "компании" в амо
Name VARCHAR(512) NOT NULL DEFAULT '',
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
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) NOT NULL DEFAULT '' -- URL объктного хранилища
);
CREATE UNIQUE INDEX idx_unique_accountsAmo ON accountsAmo (amoID) WHERE Deleted = false;
CREATE TABLE IF NOT EXISTS usersAmo (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AmoID INT NOT NULL, -- ID компании в амо (внешний ключ)
AmoUserID INT NOT NULL, -- ID пользователя в амо
Name VARCHAR(512) NOT NULL DEFAULT '',
Email VARCHAR(50) NOT NULL DEFAULT '',
Role INT NOT NULL DEFAULT 0,
"Group" INT NOT NULL DEFAULT 0,
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

@ -20,6 +20,18 @@ type Account struct {
Deleted sql.NullBool `db:"deleted" json:"deleted"` Deleted sql.NullBool `db:"deleted" json:"deleted"`
} }
type Accountsamo struct {
ID int64 `db:"id" json:"id"`
Accountid string `db:"accountid" json:"accountid"`
Amoid int32 `db:"amoid" json:"amoid"`
Name string `db:"name" json:"name"`
Deleted bool `db:"deleted" json:"deleted"`
Createdat time.Time `db:"createdat" json:"createdat"`
Subdomain string `db:"subdomain" json:"subdomain"`
Country string `db:"country" json:"country"`
Driveurl string `db:"driveurl" json:"driveurl"`
}
type Amocrmstatus struct { type Amocrmstatus struct {
ID int64 `db:"id" json:"id"` ID int64 `db:"id" json:"id"`
Accountid int32 `db:"accountid" json:"accountid"` Accountid int32 `db:"accountid" json:"accountid"`
@ -173,18 +185,14 @@ type Token struct {
Createdat sql.NullTime `db:"createdat" json:"createdat"` Createdat sql.NullTime `db:"createdat" json:"createdat"`
} }
type User struct { type Usersamo struct {
ID int64 `db:"id" json:"id"` ID int64 `db:"id" json:"id"`
Accountid string `db:"accountid" json:"accountid"` Amoid int32 `db:"amoid" json:"amoid"`
Amoid int32 `db:"amoid" json:"amoid"` Amouserid int32 `db:"amouserid" json:"amouserid"`
Name string `db:"name" json:"name"` Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"` Email string `db:"email" json:"email"`
Role int32 `db:"role" json:"role"` Role int32 `db:"role" json:"role"`
Group int32 `db:"Group" json:"Group"` Group int32 `db:"Group" json:"Group"`
Deleted bool `db:"deleted" json:"deleted"` Deleted bool `db:"deleted" json:"deleted"`
Createdat sql.NullTime `db:"createdat" json:"createdat"` Createdat time.Time `db:"createdat" json:"createdat"`
Subdomain string `db:"subdomain" json:"subdomain"`
Amouserid int32 `db:"amouserid" json:"amouserid"`
Country string `db:"country" json:"country"`
Driveurl string `db:"driveurl" json:"driveurl"`
} }

@ -60,6 +60,32 @@ func (q *Queries) AccountPagination(ctx context.Context, arg AccountPaginationPa
return items, nil return items, nil
} }
const addAmoAccountUser = `-- name: AddAmoAccountUser :exec
INSERT INTO usersAmo (AmoID, AmoUserID, Name, Email, Role, "Group")
VALUES ($1, $2, $3, $4, $5, $6)
`
type AddAmoAccountUserParams struct {
Amoid int32 `db:"amoid" json:"amoid"`
Amouserid int32 `db:"amouserid" json:"amouserid"`
Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"`
Role int32 `db:"role" json:"role"`
Group int32 `db:"Group" json:"Group"`
}
func (q *Queries) AddAmoAccountUser(ctx context.Context, arg AddAmoAccountUserParams) error {
_, err := q.db.ExecContext(ctx, addAmoAccountUser,
arg.Amoid,
arg.Amouserid,
arg.Name,
arg.Email,
arg.Role,
arg.Group,
)
return err
}
const allServiceStatistics = `-- name: AllServiceStatistics :one const allServiceStatistics = `-- name: AllServiceStatistics :one
WITH Registrations AS ( WITH Registrations AS (
SELECT COUNT(*) AS registration_count SELECT COUNT(*) AS registration_count
@ -117,7 +143,7 @@ func (q *Queries) ArchiveQuiz(ctx context.Context, arg ArchiveQuizParams) error
const changeQuizSettings = `-- name: ChangeQuizSettings :one const changeQuizSettings = `-- 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
` `
@ -200,9 +226,7 @@ func (q *Queries) CheckExpired(ctx context.Context) ([]Token, error) {
const checkFields = `-- name: CheckFields :many const checkFields = `-- 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,
@ -282,29 +306,6 @@ func (q *Queries) CheckFields(ctx context.Context, arg CheckFieldsParams) ([]Che
return items, nil return items, nil
} }
const checkMainUser = `-- name: CheckMainUser :exec
UPDATE users SET Name = $1, "Group" = $2, Email = $3, Role = $4 WHERE AmoID = $5
`
type CheckMainUserParams struct {
Name string `db:"name" json:"name"`
Group int32 `db:"Group" json:"Group"`
Email string `db:"email" json:"email"`
Role int32 `db:"role" json:"role"`
Amoid int32 `db:"amoid" json:"amoid"`
}
func (q *Queries) CheckMainUser(ctx context.Context, arg CheckMainUserParams) error {
_, err := q.db.ExecContext(ctx, checkMainUser,
arg.Name,
arg.Group,
arg.Email,
arg.Role,
arg.Amoid,
)
return err
}
const checkPipelines = `-- name: CheckPipelines :many const checkPipelines = `-- name: CheckPipelines :many
WITH new_pipelines AS ( WITH new_pipelines AS (
SELECT (pipeline->>'AmoID')::INT AS amoID, SELECT (pipeline->>'AmoID')::INT AS amoID,
@ -487,9 +488,7 @@ func (q *Queries) CheckSteps(ctx context.Context, dollar_1 json.RawMessage) ([]C
const checkTags = `-- name: CheckTags :many const checkTags = `-- 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,
@ -562,79 +561,6 @@ func (q *Queries) CheckTags(ctx context.Context, arg CheckTagsParams) ([]CheckTa
return items, nil return items, nil
} }
const checkUsers = `-- 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 id, accountid, amoid, name, email, role, "Group", deleted, createdat, subdomain, amouserid, country, driveurl
)
SELECT nu.amoid, nu.name, nu."Group", nu.role, nu.email, nu.amouserid, nu.createdat
FROM new_users nu
WHERE NOT EXISTS (
SELECT id, accountid, amoid, name, email, role, "Group", deleted, createdat, subdomain, amouserid, country, driveurl
FROM inserted_users ins
WHERE ins.amoID = nu.amoID
)
`
type CheckUsersRow struct {
Amoid int32 `db:"amoid" json:"amoid"`
Name string `db:"name" json:"name"`
Group int32 `db:"Group" json:"Group"`
Role int32 `db:"role" json:"role"`
Email string `db:"email" json:"email"`
Amouserid int32 `db:"amouserid" json:"amouserid"`
Createdat interface{} `db:"createdat" json:"createdat"`
}
func (q *Queries) CheckUsers(ctx context.Context, dollar_1 json.RawMessage) ([]CheckUsersRow, error) {
rows, err := q.db.QueryContext(ctx, checkUsers, dollar_1)
if err != nil {
return nil, err
}
defer rows.Close()
var items []CheckUsersRow
for rows.Next() {
var i CheckUsersRow
if err := rows.Scan(
&i.Amoid,
&i.Name,
&i.Group,
&i.Role,
&i.Email,
&i.Amouserid,
&i.Createdat,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const copyQuestion = `-- name: CopyQuestion :one const copyQuestion = `-- name: CopyQuestion :one
INSERT INTO question( INSERT INTO question(
quiz_id, title, description, questiontype, required, quiz_id, title, description, questiontype, required,
@ -780,23 +706,17 @@ func (q *Queries) CreateAccount(ctx context.Context, arg CreateAccountParams) (A
const createAmoAccount = `-- name: CreateAmoAccount :exec const createAmoAccount = `-- 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)
` `
type CreateAmoAccountParams struct { type CreateAmoAccountParams struct {
Accountid string `db:"accountid" json:"accountid"` Accountid string `db:"accountid" json:"accountid"`
Amoid int32 `db:"amoid" json:"amoid"` Amoid int32 `db:"amoid" json:"amoid"`
Name string `db:"name" json:"name"` Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"` Subdomain string `db:"subdomain" json:"subdomain"`
Role int32 `db:"role" json:"role"` Country string `db:"country" json:"country"`
Group int32 `db:"Group" json:"Group"` Driveurl string `db:"driveurl" json:"driveurl"`
Deleted bool `db:"deleted" json:"deleted"`
Createdat sql.NullTime `db:"createdat" json:"createdat"`
Subdomain string `db:"subdomain" json:"subdomain"`
Amouserid int32 `db:"amouserid" json:"amouserid"`
Country string `db:"country" json:"country"`
Driveurl string `db:"driveurl" json:"driveurl"`
} }
// amo methods: // amo methods:
@ -805,13 +725,7 @@ func (q *Queries) CreateAmoAccount(ctx context.Context, arg CreateAmoAccountPara
arg.Accountid, arg.Accountid,
arg.Amoid, arg.Amoid,
arg.Name, arg.Name,
arg.Email,
arg.Role,
arg.Group,
arg.Deleted,
arg.Createdat,
arg.Subdomain, arg.Subdomain,
arg.Amouserid,
arg.Country, arg.Country,
arg.Driveurl, arg.Driveurl,
) )
@ -1004,7 +918,7 @@ func (q *Queries) DeleteTags(ctx context.Context, dollar_1 []int64) error {
} }
const deleteUsers = `-- name: DeleteUsers :exec const deleteUsers = `-- name: DeleteUsers :exec
UPDATE users SET Deleted = true WHERE ID = ANY($1::bigint[]) UPDATE usersAmo SET Deleted = true WHERE ID = ANY($1::bigint[])
` `
func (q *Queries) DeleteUsers(ctx context.Context, dollar_1 []int64) error { func (q *Queries) DeleteUsers(ctx context.Context, dollar_1 []int64) error {
@ -1459,6 +1373,43 @@ func (q *Queries) GetAllAnswersByQuizID(ctx context.Context, session sql.NullStr
return items, nil return items, nil
} }
const getAllCompanyUsers = `-- name: GetAllCompanyUsers :many
SELECT id, amoid, amouserid, name, email, role, "Group", deleted, createdat FROM usersamo WHERE amoid = $1 AND deleted = false
`
func (q *Queries) GetAllCompanyUsers(ctx context.Context, amoid int32) ([]Usersamo, error) {
rows, err := q.db.QueryContext(ctx, getAllCompanyUsers, amoid)
if err != nil {
return nil, err
}
defer rows.Close()
var items []Usersamo
for rows.Next() {
var i Usersamo
if err := rows.Scan(
&i.ID,
&i.Amoid,
&i.Amouserid,
&i.Name,
&i.Email,
&i.Role,
&i.Group,
&i.Deleted,
&i.Createdat,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const getAllTokens = `-- name: GetAllTokens :many const getAllTokens = `-- name: GetAllTokens :many
SELECT accountid, refreshtoken, accesstoken, authcode, expiration, createdat FROM tokens SELECT accountid, refreshtoken, accesstoken, authcode, expiration, createdat FROM tokens
` `
@ -1493,25 +1444,21 @@ func (q *Queries) GetAllTokens(ctx context.Context) ([]Token, error) {
return items, nil return items, nil
} }
const getCurrentAccount = `-- name: GetCurrentAccount :one const getCurrentCompany = `-- name: GetCurrentCompany :one
SELECT id, accountid, amoid, name, email, role, "Group", deleted, createdat, subdomain, amouserid, country, driveurl FROM users WHERE AccountID = $1 AND Deleted = false SELECT id, accountid, amoid, name, deleted, createdat, subdomain, country, driveurl FROM accountsAmo WHERE AccountID = $1 AND Deleted = false
` `
func (q *Queries) GetCurrentAccount(ctx context.Context, accountid string) (User, error) { func (q *Queries) GetCurrentCompany(ctx context.Context, accountid string) (Accountsamo, error) {
row := q.db.QueryRowContext(ctx, getCurrentAccount, accountid) row := q.db.QueryRowContext(ctx, getCurrentCompany, accountid)
var i User var i Accountsamo
err := row.Scan( err := row.Scan(
&i.ID, &i.ID,
&i.Accountid, &i.Accountid,
&i.Amoid, &i.Amoid,
&i.Name, &i.Name,
&i.Email,
&i.Role,
&i.Group,
&i.Deleted, &i.Deleted,
&i.Createdat, &i.Createdat,
&i.Subdomain, &i.Subdomain,
&i.Amouserid,
&i.Country, &i.Country,
&i.Driveurl, &i.Driveurl,
) )
@ -1634,8 +1581,11 @@ func (q *Queries) GetFieldByAmoID(ctx context.Context, amoid int32) (Field, erro
} }
const getFieldsWithPagination = `-- name: GetFieldsWithPagination :many const getFieldsWithPagination = `-- name: GetFieldsWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT f.id, f.amoid, f.code, f.accountid, f.name, f.entity, f.type, f.deleted, f.createdat, COUNT(*) OVER() as total_count SELECT f.id, f.amoid, f.code, f.accountid, f.name, f.entity, f.type, f.deleted, f.createdat, 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
` `
@ -1750,8 +1700,11 @@ func (q *Queries) GetListStartQuiz(ctx context.Context, accountid string) ([]int
} }
const getPipelinesWithPagination = `-- name: GetPipelinesWithPagination :many const getPipelinesWithPagination = `-- name: GetPipelinesWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT p.id, p.amoid, p.accountid, p.name, p.isarchive, p.deleted, p.createdat, COUNT(*) OVER() as total_count SELECT p.id, p.amoid, p.accountid, p.name, p.isarchive, p.deleted, p.createdat, 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
` `
@ -2368,8 +2321,11 @@ func (q *Queries) GetResultAnswers(ctx context.Context, id int64) ([]GetResultAn
} }
const getStepsWithPagination = `-- name: GetStepsWithPagination :many const getStepsWithPagination = `-- name: GetStepsWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT s.id, s.amoid, s.pipelineid, s.accountid, s.name, s.color, s.deleted, s.createdat, COUNT(*) OVER() as total_count SELECT s.id, s.amoid, s.pipelineid, s.accountid, s.name, s.color, s.deleted, s.createdat, 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
` `
@ -2432,8 +2388,11 @@ func (q *Queries) GetStepsWithPagination(ctx context.Context, arg GetStepsWithPa
} }
const getTagsWithPagination = `-- name: GetTagsWithPagination :many const getTagsWithPagination = `-- name: GetTagsWithPagination :many
WITH user_data AS (
SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $1 AND accountsAmo.Deleted = false
)
SELECT t.id, t.amoid, t.accountid, t.entity, t.name, t.color, t.deleted, t.createdat, COUNT(*) OVER() as total_count SELECT t.id, t.amoid, t.accountid, t.entity, t.name, t.color, t.deleted, t.createdat, 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
` `
@ -2688,44 +2647,28 @@ func (q *Queries) GetUserTagsByID(ctx context.Context, accountid int32) ([]GetUs
} }
const getUserUsersByID = `-- name: GetUserUsersByID :many const getUserUsersByID = `-- name: GetUserUsersByID :many
SELECT ID,AccountID,AmoID,Name,Email,Role,"Group",Subdomain,AmoUserID,Country SELECT id, amoid, amouserid, name, email, role, "Group", deleted, createdat FROM usersAmo WHERE amoid = $1 AND Deleted = false
FROM users
WHERE AmoUserID = $1 AND Deleted = false
` `
type GetUserUsersByIDRow struct { func (q *Queries) GetUserUsersByID(ctx context.Context, amoid int32) ([]Usersamo, error) {
ID int64 `db:"id" json:"id"` rows, err := q.db.QueryContext(ctx, getUserUsersByID, amoid)
Accountid string `db:"accountid" json:"accountid"`
Amoid int32 `db:"amoid" json:"amoid"`
Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"`
Role int32 `db:"role" json:"role"`
Group int32 `db:"Group" json:"Group"`
Subdomain string `db:"subdomain" json:"subdomain"`
Amouserid int32 `db:"amouserid" json:"amouserid"`
Country string `db:"country" json:"country"`
}
func (q *Queries) GetUserUsersByID(ctx context.Context, amouserid int32) ([]GetUserUsersByIDRow, error) {
rows, err := q.db.QueryContext(ctx, getUserUsersByID, amouserid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer rows.Close() defer rows.Close()
var items []GetUserUsersByIDRow var items []Usersamo
for rows.Next() { for rows.Next() {
var i GetUserUsersByIDRow var i Usersamo
if err := rows.Scan( if err := rows.Scan(
&i.ID, &i.ID,
&i.Accountid,
&i.Amoid, &i.Amoid,
&i.Amouserid,
&i.Name, &i.Name,
&i.Email, &i.Email,
&i.Role, &i.Role,
&i.Group, &i.Group,
&i.Subdomain, &i.Deleted,
&i.Amouserid, &i.Createdat,
&i.Country,
); err != nil { ); err != nil {
return nil, err return nil, err
} }
@ -2742,11 +2685,11 @@ func (q *Queries) GetUserUsersByID(ctx context.Context, amouserid int32) ([]GetU
const getUsersWithPagination = `-- name: GetUsersWithPagination :many const getUsersWithPagination = `-- 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.id, u.accountid, u.amoid, u.name, u.email, u.role, u."Group", u.deleted, u.createdat, u.subdomain, u.amouserid, u.country, u.driveurl, COUNT(*) OVER() as total_count SELECT u.id, u.amoid, u.amouserid, u.name, u.email, u.role, u."Group", u.deleted, u.createdat, 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
` `
@ -2758,20 +2701,16 @@ type GetUsersWithPaginationParams struct {
} }
type GetUsersWithPaginationRow struct { type GetUsersWithPaginationRow struct {
ID int64 `db:"id" json:"id"` ID int64 `db:"id" json:"id"`
Accountid string `db:"accountid" json:"accountid"` Amoid int32 `db:"amoid" json:"amoid"`
Amoid int32 `db:"amoid" json:"amoid"` Amouserid int32 `db:"amouserid" json:"amouserid"`
Name string `db:"name" json:"name"` Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"` Email string `db:"email" json:"email"`
Role int32 `db:"role" json:"role"` Role int32 `db:"role" json:"role"`
Group int32 `db:"Group" json:"Group"` Group int32 `db:"Group" json:"Group"`
Deleted bool `db:"deleted" json:"deleted"` Deleted bool `db:"deleted" json:"deleted"`
Createdat sql.NullTime `db:"createdat" json:"createdat"` Createdat time.Time `db:"createdat" json:"createdat"`
Subdomain string `db:"subdomain" json:"subdomain"` TotalCount int64 `db:"total_count" json:"total_count"`
Amouserid int32 `db:"amouserid" json:"amouserid"`
Country string `db:"country" json:"country"`
Driveurl string `db:"driveurl" json:"driveurl"`
TotalCount int64 `db:"total_count" json:"total_count"`
} }
func (q *Queries) GetUsersWithPagination(ctx context.Context, arg GetUsersWithPaginationParams) ([]GetUsersWithPaginationRow, error) { func (q *Queries) GetUsersWithPagination(ctx context.Context, arg GetUsersWithPaginationParams) ([]GetUsersWithPaginationRow, error) {
@ -2785,18 +2724,14 @@ func (q *Queries) GetUsersWithPagination(ctx context.Context, arg GetUsersWithPa
var i GetUsersWithPaginationRow var i GetUsersWithPaginationRow
if err := rows.Scan( if err := rows.Scan(
&i.ID, &i.ID,
&i.Accountid,
&i.Amoid, &i.Amoid,
&i.Amouserid,
&i.Name, &i.Name,
&i.Email, &i.Email,
&i.Role, &i.Role,
&i.Group, &i.Group,
&i.Deleted, &i.Deleted,
&i.Createdat, &i.Createdat,
&i.Subdomain,
&i.Amouserid,
&i.Country,
&i.Driveurl,
&i.TotalCount, &i.TotalCount,
); err != nil { ); err != nil {
return nil, err return nil, err
@ -2818,13 +2753,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
@ -3375,7 +3310,7 @@ func (q *Queries) QuizCopyQid(ctx context.Context, arg QuizCopyQidParams) (QuizC
const setQuizSettings = `-- name: SetQuizSettings :one const setQuizSettings = `-- 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
` `
@ -3408,7 +3343,7 @@ const settingDealAmoStatus = `-- name: SettingDealAmoStatus :exec
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
` `
@ -3430,12 +3365,13 @@ func (q *Queries) SettingDealAmoStatus(ctx context.Context, arg SettingDealAmoSt
} }
const softDeleteAccount = `-- name: SoftDeleteAccount :exec const softDeleteAccount = `-- 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
` `
@ -3481,9 +3417,35 @@ func (q *Queries) TemplateCopy(ctx context.Context, arg TemplateCopyParams) (int
return quiz_id, err return quiz_id, err
} }
const updateAmoAccountUser = `-- name: UpdateAmoAccountUser :exec
UPDATE usersAmo SET Name = $3, Email = $4, Role = $5, "Group" = $6
WHERE AmoID = $1 AND AmoUserID = $2 AND deleted = false
`
type UpdateAmoAccountUserParams struct {
Amoid int32 `db:"amoid" json:"amoid"`
Amouserid int32 `db:"amouserid" json:"amouserid"`
Name string `db:"name" json:"name"`
Email string `db:"email" json:"email"`
Role int32 `db:"role" json:"role"`
Group int32 `db:"Group" json:"Group"`
}
func (q *Queries) UpdateAmoAccountUser(ctx context.Context, arg UpdateAmoAccountUserParams) error {
_, err := q.db.ExecContext(ctx, updateAmoAccountUser,
arg.Amoid,
arg.Amouserid,
arg.Name,
arg.Email,
arg.Role,
arg.Group,
)
return err
}
const updateFieldRules = `-- name: UpdateFieldRules :exec const updateFieldRules = `-- 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
` `
type UpdateFieldRulesParams struct { type UpdateFieldRulesParams struct {
@ -3592,25 +3554,9 @@ func (q *Queries) UpdateTags(ctx context.Context, dollar_1 json.RawMessage) erro
return err return err
} }
const updateUsers = `-- 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
`
func (q *Queries) UpdateUsers(ctx context.Context, dollar_1 json.RawMessage) error {
_, err := q.db.ExecContext(ctx, updateUsers, dollar_1)
return err
}
const updatingDealAmoStatus = `-- name: UpdatingDealAmoStatus :exec const updatingDealAmoStatus = `-- 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)
` `
type UpdatingDealAmoStatusParams struct { type UpdatingDealAmoStatusParams struct {
@ -3625,14 +3571,17 @@ func (q *Queries) UpdatingDealAmoStatus(ctx context.Context, arg UpdatingDealAmo
} }
const webhookDelete = `-- name: WebhookDelete :exec const webhookDelete = `-- 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 accountsAmo.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)
` `
func (q *Queries) WebhookDelete(ctx context.Context, amouserid int32) error { func (q *Queries) WebhookDelete(ctx context.Context, amoid int32) error {
_, err := q.db.ExecContext(ctx, webhookDelete, amouserid) _, err := q.db.ExecContext(ctx, webhookDelete, amoid)
return err return err
} }

@ -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 {

@ -55,7 +55,7 @@ type UserListResp struct {
/* - общее количество юзеров, которые у нас закешированы для этого пользователя*/ /* - общее количество юзеров, которые у нас закешированы для этого пользователя*/
Count int64 `json:"count"` Count int64 `json:"count"`
/* - список юзеров, которые были закешированы нашим сервисом*/ /* - список юзеров, которые были закешированы нашим сервисом*/
Items []User `json:"items"` Items []AmoAccountUser `json:"items"`
} }
type UserListStepsResp struct { type UserListStepsResp struct {

@ -39,20 +39,18 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode
return nil, err return nil, err
} }
var count int64 var count int64
var users []model.User var users []model.AmoAccountUser
for _, row := range rows { for _, row := range rows {
user := model.User{ user := model.AmoAccountUser{
ID: row.ID, ID: row.ID,
Accountid: row.Accountid,
AmoID: row.Amoid, AmoID: row.Amoid,
AmoUserID: row.Amouserid,
Name: row.Name, Name: row.Name,
Email: row.Email, Email: row.Email,
Group: row.Group, Group: row.Group,
Role: row.Role, Role: row.Role,
Createdat: row.Createdat.Time.Unix(), Deleted: row.Deleted,
Subdomain: row.Subdomain, CreatedAt: row.Createdat,
Amouserid: row.Amouserid,
Country: row.Country,
} }
count = row.TotalCount count = row.TotalCount
@ -75,23 +73,20 @@ func (r *AmoRepository) SoftDeleteAccount(ctx context.Context, accountID string)
return nil return nil
} }
func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string) (*model.User, error) { func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string) (*model.AmoAccount, error) {
row, err := r.queries.GetCurrentAccount(ctx, accountID) row, err := r.queries.GetCurrentCompany(ctx, accountID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
user := model.User{ user := model.AmoAccount{
ID: row.ID, ID: row.ID,
Accountid: row.Accountid, AccountID: row.Accountid,
AmoID: row.Amoid, AmoID: row.Amoid,
Name: row.Name, Name: row.Name,
Email: row.Email, Deleted: row.Deleted,
Role: row.Role, CreatedAt: row.Createdat,
Group: row.Group,
Createdat: row.Createdat.Time.Unix(),
Subdomain: row.Subdomain, Subdomain: row.Subdomain,
Amouserid: row.Amouserid,
Country: row.Country, Country: row.Country,
DriveURL: row.Driveurl, DriveURL: row.Driveurl,
} }
@ -99,17 +94,12 @@ func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string)
return &user, nil return &user, nil
} }
func (r *AmoRepository) CreateAccount(ctx context.Context, accountID string, userInfo model.User) error { func (r *AmoRepository) CreateAccount(ctx context.Context, userInfo model.AmoAccount) error {
err := r.queries.CreateAmoAccount(ctx, sqlcgen.CreateAmoAccountParams{ err := r.queries.CreateAmoAccount(ctx, sqlcgen.CreateAmoAccountParams{
Accountid: accountID, Accountid: userInfo.AccountID,
Amoid: userInfo.AmoID, Amoid: userInfo.AmoID,
Name: userInfo.Name, Name: userInfo.Name,
Email: userInfo.Email,
Role: userInfo.Role,
Group: userInfo.Group,
Createdat: sql.NullTime{Time: time.Now(), Valid: true},
Subdomain: userInfo.Subdomain, Subdomain: userInfo.Subdomain,
Amouserid: userInfo.Amouserid,
Country: userInfo.Country, Country: userInfo.Country,
Driveurl: userInfo.DriveURL, Driveurl: userInfo.DriveURL,
}) })
@ -121,15 +111,17 @@ func (r *AmoRepository) CreateAccount(ctx context.Context, accountID string, use
return nil return nil
} }
func (r *AmoRepository) CheckMainUser(ctx context.Context, user model.User) error { // todo возможно стоит обновлять еще и компанию пока не знаю
err := r.queries.CheckMainUser(ctx, sqlcgen.CheckMainUserParams{
Name: user.Name,
Group: user.Group,
Email: user.Email,
Role: user.Role,
Amoid: user.AmoID,
})
func (r *AmoRepository) AddAmoAccountUser(ctx context.Context, user model.AmoAccountUser) error {
err := r.queries.AddAmoAccountUser(ctx, sqlcgen.AddAmoAccountUserParams{
Amoid: user.AmoID,
Amouserid: user.AmoUserID,
Name: user.Name,
Email: user.Email,
Role: user.Role,
Group: user.Group,
})
if err != nil { if err != nil {
return err return err
} }
@ -137,39 +129,18 @@ func (r *AmoRepository) CheckMainUser(ctx context.Context, user model.User) erro
return nil return nil
} }
func (r *AmoRepository) CheckAndUpdateUsers(ctx context.Context, users []model.User) error { func (r *AmoRepository) UpdateAmoAccountUser(ctx context.Context, user model.AmoAccountUser) error {
dollar1, err := json.Marshal(users) err := r.queries.UpdateAmoAccountUser(ctx, sqlcgen.UpdateAmoAccountUserParams{
Amoid: user.AmoID,
Amouserid: user.AmoUserID,
Name: user.Name,
Email: user.Email,
Role: user.Role,
Group: user.Group,
})
if err != nil { if err != nil {
return err return err
} }
rows, err := r.queries.CheckUsers(ctx, dollar1)
if err != nil {
return err
}
if rows != nil {
var toUpdate []model.User
for _, row := range rows {
to := model.User{
AmoID: row.Amoid,
Name: row.Name,
Group: row.Group,
Role: row.Role,
Email: row.Email,
Amouserid: row.Amouserid,
}
toUpdate = append(toUpdate, to)
}
dollar1, err := json.Marshal(toUpdate)
if err != nil {
return err
}
err = r.queries.UpdateUsers(ctx, dollar1)
if err != nil {
return err
}
}
return nil return nil
} }
@ -195,27 +166,25 @@ func (r *AmoRepository) DeleteUsers(ctx context.Context, ids []int64) error {
return nil return nil
} }
func (r *AmoRepository) GetUserUsersByID(ctx context.Context, amoUserID int32) ([]model.User, error) { func (r *AmoRepository) GetUserUsersByID(ctx context.Context, amoUserID int32) ([]model.AmoAccountUser, error) {
rows, err := r.queries.GetUserUsersByID(ctx, amoUserID) rows, err := r.queries.GetUserUsersByID(ctx, amoUserID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var users []model.User var users []model.AmoAccountUser
for _, row := range rows { for _, row := range rows {
user := model.User{ user := model.AmoAccountUser{
ID: row.ID, ID: row.ID,
Accountid: row.Accountid,
AmoID: row.Amoid, AmoID: row.Amoid,
AmoUserID: row.Amouserid,
Name: row.Name, Name: row.Name,
Email: row.Email, Email: row.Email,
Group: row.Group, Group: row.Group,
Role: row.Role, Role: row.Role,
Subdomain: row.Subdomain, Deleted: row.Deleted,
Amouserid: row.Amouserid, CreatedAt: row.Createdat,
Country: row.Country,
} }
users = append(users, user) users = append(users, user)
} }

@ -30,6 +30,8 @@ packages:
- "./dal/schema/000012_init.down.sql" - "./dal/schema/000012_init.down.sql"
- "./dal/schema/000013_init.up.sql" - "./dal/schema/000013_init.up.sql"
- "./dal/schema/000013_init.down.sql" - "./dal/schema/000013_init.down.sql"
- "./dal/schema/000014_init.up.sql"
- "./dal/schema/000014_init.down.sql"
engine: "postgresql" engine: "postgresql"
emit_json_tags: true emit_json_tags: true
emit_db_tags: true emit_db_tags: true