diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 47181e4..0aae5f9 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -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; diff --git a/dal/schema/000014_init.down.sql b/dal/schema/000014_init.down.sql new file mode 100644 index 0000000..5ddb16f --- /dev/null +++ b/dal/schema/000014_init.down.sql @@ -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; \ No newline at end of file diff --git a/dal/schema/000014_init.up.sql b/dal/schema/000014_init.up.sql new file mode 100644 index 0000000..9542bbb --- /dev/null +++ b/dal/schema/000014_init.up.sql @@ -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 +); \ No newline at end of file diff --git a/dal/sqlcgen/models.go b/dal/sqlcgen/models.go index d6e25c0..c6d928d 100644 --- a/dal/sqlcgen/models.go +++ b/dal/sqlcgen/models.go @@ -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"` } diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 1d2ff0b..1d80a1c 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -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 } diff --git a/model/amo.go b/model/amo.go index b5bf0ea..2c9287e 100644 --- a/model/amo.go +++ b/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 { diff --git a/model/amoResp.go b/model/amoResp.go index fd49975..1a65002 100644 --- a/model/amoResp.go +++ b/model/amoResp.go @@ -55,7 +55,7 @@ type UserListResp struct { /* - общее количество юзеров, которые у нас закешированы для этого пользователя*/ Count int64 `json:"count"` /* - список юзеров, которые были закешированы нашим сервисом*/ - Items []User `json:"items"` + Items []AmoAccountUser `json:"items"` } type UserListStepsResp struct { diff --git a/repository/amo/amo.go b/repository/amo/amo.go index 76c0cb6..b67a328 100644 --- a/repository/amo/amo.go +++ b/repository/amo/amo.go @@ -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) } diff --git a/sqlc.yaml b/sqlc.yaml index 9658197..d367be4 100644 --- a/sqlc.yaml +++ b/sqlc.yaml @@ -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