Merge branch 'usersSeparate' into 'main'
Users separate See merge request backend/quiz/common!26
This commit is contained in:
commit
e3e07c8869
@ -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 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
|
||||
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 = $1 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
|
||||
SELECT u.*, COUNT(*) OVER() as total_count
|
||||
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")
|
||||
VALUES ($1, $2, $3, $4, $5, $6);
|
||||
|
||||
-- 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;
|
||||
@ -1064,4 +1041,4 @@ WHERE AccountID = $1 AND Deleted = false;
|
||||
-- name: DecrementManual :one
|
||||
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
|
||||
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;
|
||||
|
20
dal/schema/000014_init.down.sql
Normal file
20
dal/schema/000014_init.down.sql
Normal file
@ -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;
|
28
dal/schema/000014_init.up.sql
Normal file
28
dal/schema/000014_init.up.sql
Normal file
@ -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"`
|
||||
}
|
||||
|
||||
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 {
|
||||
ID int64 `db:"id" json:"id"`
|
||||
Accountid int32 `db:"accountid" json:"accountid"`
|
||||
@ -173,18 +185,14 @@ type Token struct {
|
||||
Createdat sql.NullTime `db:"createdat" json:"createdat"`
|
||||
}
|
||||
|
||||
type User 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"`
|
||||
Email string `db:"email" json:"email"`
|
||||
Role int32 `db:"role" json:"role"`
|
||||
Group int32 `db:"Group" json:"Group"`
|
||||
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"`
|
||||
type Usersamo struct {
|
||||
ID int64 `db:"id" json:"id"`
|
||||
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"`
|
||||
Deleted bool `db:"deleted" json:"deleted"`
|
||||
Createdat time.Time `db:"createdat" json:"createdat"`
|
||||
}
|
||||
|
@ -60,6 +60,32 @@ func (q *Queries) AccountPagination(ctx context.Context, arg AccountPaginationPa
|
||||
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
|
||||
WITH Registrations AS (
|
||||
SELECT COUNT(*) AS registration_count
|
||||
@ -117,7 +143,7 @@ func (q *Queries) ArchiveQuiz(ctx context.Context, arg ArchiveQuizParams) error
|
||||
const changeQuizSettings = `-- 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
|
||||
`
|
||||
|
||||
@ -200,9 +226,7 @@ func (q *Queries) CheckExpired(ctx context.Context) ([]Token, error) {
|
||||
|
||||
const checkFields = `-- 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,
|
||||
@ -282,29 +306,6 @@ func (q *Queries) CheckFields(ctx context.Context, arg CheckFieldsParams) ([]Che
|
||||
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
|
||||
WITH new_pipelines AS (
|
||||
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
|
||||
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,
|
||||
@ -562,79 +561,6 @@ func (q *Queries) CheckTags(ctx context.Context, arg CheckTagsParams) ([]CheckTa
|
||||
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
|
||||
INSERT INTO question(
|
||||
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
|
||||
|
||||
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)
|
||||
`
|
||||
|
||||
type CreateAmoAccountParams struct {
|
||||
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"`
|
||||
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"`
|
||||
Accountid string `db:"accountid" json:"accountid"`
|
||||
Amoid int32 `db:"amoid" json:"amoid"`
|
||||
Name string `db:"name" json:"name"`
|
||||
Subdomain string `db:"subdomain" json:"subdomain"`
|
||||
Country string `db:"country" json:"country"`
|
||||
Driveurl string `db:"driveurl" json:"driveurl"`
|
||||
}
|
||||
|
||||
// amo methods:
|
||||
@ -805,13 +725,7 @@ func (q *Queries) CreateAmoAccount(ctx context.Context, arg CreateAmoAccountPara
|
||||
arg.Accountid,
|
||||
arg.Amoid,
|
||||
arg.Name,
|
||||
arg.Email,
|
||||
arg.Role,
|
||||
arg.Group,
|
||||
arg.Deleted,
|
||||
arg.Createdat,
|
||||
arg.Subdomain,
|
||||
arg.Amouserid,
|
||||
arg.Country,
|
||||
arg.Driveurl,
|
||||
)
|
||||
@ -1004,7 +918,7 @@ func (q *Queries) DeleteTags(ctx context.Context, dollar_1 []int64) error {
|
||||
}
|
||||
|
||||
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 {
|
||||
@ -1459,6 +1373,43 @@ func (q *Queries) GetAllAnswersByQuizID(ctx context.Context, session sql.NullStr
|
||||
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
|
||||
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
|
||||
}
|
||||
|
||||
const getCurrentAccount = `-- name: GetCurrentAccount :one
|
||||
SELECT id, accountid, amoid, name, email, role, "Group", deleted, createdat, subdomain, amouserid, country, driveurl FROM users WHERE AccountID = $1 AND Deleted = false
|
||||
const getCurrentCompany = `-- name: GetCurrentCompany :one
|
||||
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) {
|
||||
row := q.db.QueryRowContext(ctx, getCurrentAccount, accountid)
|
||||
var i User
|
||||
func (q *Queries) GetCurrentCompany(ctx context.Context, accountid string) (Accountsamo, error) {
|
||||
row := q.db.QueryRowContext(ctx, getCurrentCompany, accountid)
|
||||
var i Accountsamo
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.Accountid,
|
||||
&i.Amoid,
|
||||
&i.Name,
|
||||
&i.Email,
|
||||
&i.Role,
|
||||
&i.Group,
|
||||
&i.Deleted,
|
||||
&i.Createdat,
|
||||
&i.Subdomain,
|
||||
&i.Amouserid,
|
||||
&i.Country,
|
||||
&i.Driveurl,
|
||||
)
|
||||
@ -1634,8 +1581,11 @@ func (q *Queries) GetFieldByAmoID(ctx context.Context, amoid int32) (Field, erro
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
`
|
||||
@ -1750,8 +1700,11 @@ func (q *Queries) GetListStartQuiz(ctx context.Context, accountid string) ([]int
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
`
|
||||
@ -2368,8 +2321,11 @@ func (q *Queries) GetResultAnswers(ctx context.Context, id int64) ([]GetResultAn
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
`
|
||||
@ -2432,8 +2388,11 @@ func (q *Queries) GetStepsWithPagination(ctx context.Context, arg GetStepsWithPa
|
||||
}
|
||||
|
||||
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
|
||||
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
|
||||
`
|
||||
@ -2688,44 +2647,28 @@ func (q *Queries) GetUserTagsByID(ctx context.Context, accountid int32) ([]GetUs
|
||||
}
|
||||
|
||||
const getUserUsersByID = `-- name: GetUserUsersByID :many
|
||||
SELECT ID,AccountID,AmoID,Name,Email,Role,"Group",Subdomain,AmoUserID,Country
|
||||
FROM users
|
||||
WHERE AmoUserID = $1 AND Deleted = false
|
||||
SELECT id, amoid, amouserid, name, email, role, "Group", deleted, createdat FROM usersAmo WHERE amoid = $1 AND Deleted = false
|
||||
`
|
||||
|
||||
type GetUserUsersByIDRow 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"`
|
||||
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)
|
||||
func (q *Queries) GetUserUsersByID(ctx context.Context, amoid int32) ([]Usersamo, error) {
|
||||
rows, err := q.db.QueryContext(ctx, getUserUsersByID, amoid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []GetUserUsersByIDRow
|
||||
var items []Usersamo
|
||||
for rows.Next() {
|
||||
var i GetUserUsersByIDRow
|
||||
var i Usersamo
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.Accountid,
|
||||
&i.Amoid,
|
||||
&i.Amouserid,
|
||||
&i.Name,
|
||||
&i.Email,
|
||||
&i.Role,
|
||||
&i.Group,
|
||||
&i.Subdomain,
|
||||
&i.Amouserid,
|
||||
&i.Country,
|
||||
&i.Deleted,
|
||||
&i.Createdat,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -2742,11 +2685,11 @@ func (q *Queries) GetUserUsersByID(ctx context.Context, amouserid int32) ([]GetU
|
||||
|
||||
const getUsersWithPagination = `-- 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.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
|
||||
FROM users u
|
||||
JOIN user_data a ON u.AmoUserID = a.AmoID
|
||||
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 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
|
||||
`
|
||||
@ -2758,20 +2701,16 @@ type GetUsersWithPaginationParams struct {
|
||||
}
|
||||
|
||||
type GetUsersWithPaginationRow 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"`
|
||||
Email string `db:"email" json:"email"`
|
||||
Role int32 `db:"role" json:"role"`
|
||||
Group int32 `db:"Group" json:"Group"`
|
||||
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"`
|
||||
TotalCount int64 `db:"total_count" json:"total_count"`
|
||||
ID int64 `db:"id" json:"id"`
|
||||
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"`
|
||||
Deleted bool `db:"deleted" json:"deleted"`
|
||||
Createdat time.Time `db:"createdat" json:"createdat"`
|
||||
TotalCount int64 `db:"total_count" json:"total_count"`
|
||||
}
|
||||
|
||||
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
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.Accountid,
|
||||
&i.Amoid,
|
||||
&i.Amouserid,
|
||||
&i.Name,
|
||||
&i.Email,
|
||||
&i.Role,
|
||||
&i.Group,
|
||||
&i.Deleted,
|
||||
&i.Createdat,
|
||||
&i.Subdomain,
|
||||
&i.Amouserid,
|
||||
&i.Country,
|
||||
&i.Driveurl,
|
||||
&i.TotalCount,
|
||||
); err != nil {
|
||||
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
|
||||
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
|
||||
@ -3375,7 +3310,7 @@ func (q *Queries) QuizCopyQid(ctx context.Context, arg QuizCopyQidParams) (QuizC
|
||||
const setQuizSettings = `-- 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
|
||||
`
|
||||
|
||||
@ -3408,7 +3343,7 @@ const settingDealAmoStatus = `-- name: SettingDealAmoStatus :exec
|
||||
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
|
||||
`
|
||||
|
||||
@ -3430,12 +3365,13 @@ func (q *Queries) SettingDealAmoStatus(ctx context.Context, arg SettingDealAmoSt
|
||||
}
|
||||
|
||||
const softDeleteAccount = `-- 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
|
||||
`
|
||||
|
||||
@ -3481,9 +3417,35 @@ func (q *Queries) TemplateCopy(ctx context.Context, arg TemplateCopyParams) (int
|
||||
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
|
||||
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 {
|
||||
@ -3592,25 +3554,9 @@ func (q *Queries) UpdateTags(ctx context.Context, dollar_1 json.RawMessage) erro
|
||||
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
|
||||
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 {
|
||||
@ -3625,14 +3571,17 @@ func (q *Queries) UpdatingDealAmoStatus(ctx context.Context, arg UpdatingDealAmo
|
||||
}
|
||||
|
||||
const webhookDelete = `-- 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 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 {
|
||||
_, err := q.db.ExecContext(ctx, webhookDelete, amouserid)
|
||||
func (q *Queries) WebhookDelete(ctx context.Context, amoid int32) error {
|
||||
_, err := q.db.ExecContext(ctx, webhookDelete, amoid)
|
||||
return err
|
||||
}
|
||||
|
||||
|
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 {
|
||||
|
@ -55,7 +55,7 @@ type UserListResp struct {
|
||||
/* - общее количество юзеров, которые у нас закешированы для этого пользователя*/
|
||||
Count int64 `json:"count"`
|
||||
/* - список юзеров, которые были закешированы нашим сервисом*/
|
||||
Items []User `json:"items"`
|
||||
Items []AmoAccountUser `json:"items"`
|
||||
}
|
||||
|
||||
type UserListStepsResp struct {
|
||||
|
@ -39,20 +39,18 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode
|
||||
return nil, err
|
||||
}
|
||||
var count int64
|
||||
var users []model.User
|
||||
var users []model.AmoAccountUser
|
||||
for _, row := range rows {
|
||||
user := model.User{
|
||||
user := model.AmoAccountUser{
|
||||
ID: row.ID,
|
||||
Accountid: row.Accountid,
|
||||
AmoID: row.Amoid,
|
||||
AmoUserID: row.Amouserid,
|
||||
Name: row.Name,
|
||||
Email: row.Email,
|
||||
Group: row.Group,
|
||||
Role: row.Role,
|
||||
Createdat: row.Createdat.Time.Unix(),
|
||||
Subdomain: row.Subdomain,
|
||||
Amouserid: row.Amouserid,
|
||||
Country: row.Country,
|
||||
Deleted: row.Deleted,
|
||||
CreatedAt: row.Createdat,
|
||||
}
|
||||
count = row.TotalCount
|
||||
|
||||
@ -75,23 +73,20 @@ func (r *AmoRepository) SoftDeleteAccount(ctx context.Context, accountID string)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string) (*model.User, error) {
|
||||
row, err := r.queries.GetCurrentAccount(ctx, accountID)
|
||||
func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string) (*model.AmoAccount, error) {
|
||||
row, err := r.queries.GetCurrentCompany(ctx, accountID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
user := model.User{
|
||||
user := model.AmoAccount{
|
||||
ID: row.ID,
|
||||
Accountid: row.Accountid,
|
||||
AccountID: row.Accountid,
|
||||
AmoID: row.Amoid,
|
||||
Name: row.Name,
|
||||
Email: row.Email,
|
||||
Role: row.Role,
|
||||
Group: row.Group,
|
||||
Createdat: row.Createdat.Time.Unix(),
|
||||
Deleted: row.Deleted,
|
||||
CreatedAt: row.Createdat,
|
||||
Subdomain: row.Subdomain,
|
||||
Amouserid: row.Amouserid,
|
||||
Country: row.Country,
|
||||
DriveURL: row.Driveurl,
|
||||
}
|
||||
@ -99,17 +94,12 @@ func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string)
|
||||
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{
|
||||
Accountid: accountID,
|
||||
Accountid: userInfo.AccountID,
|
||||
Amoid: userInfo.AmoID,
|
||||
Name: userInfo.Name,
|
||||
Email: userInfo.Email,
|
||||
Role: userInfo.Role,
|
||||
Group: userInfo.Group,
|
||||
Createdat: sql.NullTime{Time: time.Now(), Valid: true},
|
||||
Subdomain: userInfo.Subdomain,
|
||||
Amouserid: userInfo.Amouserid,
|
||||
Country: userInfo.Country,
|
||||
Driveurl: userInfo.DriveURL,
|
||||
})
|
||||
@ -121,15 +111,17 @@ func (r *AmoRepository) CreateAccount(ctx context.Context, accountID string, use
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *AmoRepository) CheckMainUser(ctx context.Context, user model.User) error {
|
||||
err := r.queries.CheckMainUser(ctx, sqlcgen.CheckMainUserParams{
|
||||
Name: user.Name,
|
||||
Group: user.Group,
|
||||
Email: user.Email,
|
||||
Role: user.Role,
|
||||
Amoid: user.AmoID,
|
||||
})
|
||||
// todo возможно стоит обновлять еще и компанию пока не знаю
|
||||
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
@ -137,39 +129,18 @@ func (r *AmoRepository) CheckMainUser(ctx context.Context, user model.User) erro
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *AmoRepository) CheckAndUpdateUsers(ctx context.Context, users []model.User) error {
|
||||
dollar1, err := json.Marshal(users)
|
||||
func (r *AmoRepository) UpdateAmoAccountUser(ctx context.Context, user model.AmoAccountUser) error {
|
||||
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 {
|
||||
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
|
||||
}
|
||||
@ -195,27 +166,25 @@ func (r *AmoRepository) DeleteUsers(ctx context.Context, ids []int64) error {
|
||||
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)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var users []model.User
|
||||
var users []model.AmoAccountUser
|
||||
for _, row := range rows {
|
||||
user := model.User{
|
||||
user := model.AmoAccountUser{
|
||||
ID: row.ID,
|
||||
Accountid: row.Accountid,
|
||||
AmoID: row.Amoid,
|
||||
AmoUserID: row.Amouserid,
|
||||
Name: row.Name,
|
||||
Email: row.Email,
|
||||
Group: row.Group,
|
||||
Role: row.Role,
|
||||
Subdomain: row.Subdomain,
|
||||
Amouserid: row.Amouserid,
|
||||
Country: row.Country,
|
||||
Deleted: row.Deleted,
|
||||
CreatedAt: row.Createdat,
|
||||
}
|
||||
|
||||
users = append(users, user)
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,8 @@ packages:
|
||||
- "./dal/schema/000012_init.down.sql"
|
||||
- "./dal/schema/000013_init.up.sql"
|
||||
- "./dal/schema/000013_init.down.sql"
|
||||
- "./dal/schema/000014_init.up.sql"
|
||||
- "./dal/schema/000014_init.down.sql"
|
||||
engine: "postgresql"
|
||||
emit_json_tags: true
|
||||
emit_db_tags: true
|
||||
|
Loading…
Reference in New Issue
Block a user