Merge branch 'amoContact' into 'main'

Amo contact

See merge request backend/quiz/common!31
This commit is contained in:
Mikhail 2024-06-21 18:42:45 +00:00
commit cb6177cdeb
8 changed files with 166 additions and 0 deletions

@ -1045,3 +1045,15 @@ WHERE AccountID = $1 AND Deleted = false;
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;
-- name: GetExistingContactAmo :many
WITH getAmoID AS (
SELECT AmoID FROM amoContact WHERE amoContact.AccountID = $1 AND amoContact.Field IN ($2::text[])
) SELECT * FROM amoContact
WHERE amoContact.AccountID = $1 AND amoContact.AmoID IN (SELECT AmoID FROM getAmoID);
-- name: InsertContactAmo :one
INSERT INTO amoContact (AccountID, AmoID, Field) VALUES ($1, $2, $3) RETURNING AmoID;
-- name: UpdateAmoContact :exec
UPDATE amoContact SET Field = $1,AmoID=$3 WHERE ID = $2;

@ -0,0 +1 @@
DROP TABLE IF EXISTS amoContact;

@ -0,0 +1,6 @@
CREATE TABLE IF NOT EXISTS amoContact (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID INT NOT NULL, -- ID "компании" в амо
AmoID INT NOT NULL, -- ID контакта в амо
Field text NOT NULL DEFAULT '' -- значение чего то email? phone? etc
)

@ -32,6 +32,13 @@ type Accountsamo struct {
Driveurl string `db:"driveurl" json:"driveurl"`
}
type Amocontact struct {
ID int64 `db:"id" json:"id"`
Accountid int32 `db:"accountid" json:"accountid"`
Amoid int32 `db:"amoid" json:"amoid"`
Field string `db:"field" json:"field"`
}
type Amocrmstatus struct {
ID int64 `db:"id" json:"id"`
Accountid int32 `db:"accountid" json:"accountid"`

@ -1449,6 +1449,46 @@ func (q *Queries) GetCurrentCompany(ctx context.Context, accountid string) (Acco
return i, err
}
const getExistingContactAmo = `-- name: GetExistingContactAmo :many
WITH getAmoID AS (
SELECT AmoID FROM amoContact WHERE amoContact.AccountID = $1 AND amoContact.Field IN ($2::text[])
) SELECT id, accountid, amoid, field FROM amoContact
WHERE amoContact.AccountID = $1 AND amoContact.AmoID IN (SELECT AmoID FROM getAmoID)
`
type GetExistingContactAmoParams struct {
Accountid int32 `db:"accountid" json:"accountid"`
Column2 []string `db:"column_2" json:"column_2"`
}
func (q *Queries) GetExistingContactAmo(ctx context.Context, arg GetExistingContactAmoParams) ([]Amocontact, error) {
rows, err := q.db.QueryContext(ctx, getExistingContactAmo, arg.Accountid, pq.Array(arg.Column2))
if err != nil {
return nil, err
}
defer rows.Close()
var items []Amocontact
for rows.Next() {
var i Amocontact
if err := rows.Scan(
&i.ID,
&i.Accountid,
&i.Amoid,
&i.Field,
); 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 getExpiredCountPrivilege = `-- name: GetExpiredCountPrivilege :many
SELECT p.id, p.privilegeID, p.privilege_name, p.amount, p.created_at, a.user_id
FROM privileges p
@ -2893,6 +2933,23 @@ func (q *Queries) InsertAnswers(ctx context.Context, arg InsertAnswersParams) (A
return i, err
}
const insertContactAmo = `-- name: InsertContactAmo :one
INSERT INTO amoContact (AccountID, AmoID, Field) VALUES ($1, $2, $3) RETURNING AmoID
`
type InsertContactAmoParams struct {
Accountid int32 `db:"accountid" json:"accountid"`
Amoid int32 `db:"amoid" json:"amoid"`
Field string `db:"field" json:"field"`
}
func (q *Queries) InsertContactAmo(ctx context.Context, arg InsertContactAmoParams) (int32, error) {
row := q.db.QueryRowContext(ctx, insertContactAmo, arg.Accountid, arg.Amoid, arg.Field)
var amoid int32
err := row.Scan(&amoid)
return amoid, err
}
const insertPrivilege = `-- name: InsertPrivilege :exec
INSERT INTO privileges (privilegeID, account_id, privilege_name, amount, created_at) VALUES ($1, $2, $3, $4, $5)
`
@ -3450,6 +3507,21 @@ func (q *Queries) UpdateAmoAccountUser(ctx context.Context, arg UpdateAmoAccount
return err
}
const updateAmoContact = `-- name: UpdateAmoContact :exec
UPDATE amoContact SET Field = $1,AmoID=$3 WHERE ID = $2
`
type UpdateAmoContactParams struct {
Field string `db:"field" json:"field"`
ID int64 `db:"id" json:"id"`
Amoid int32 `db:"amoid" json:"amoid"`
}
func (q *Queries) UpdateAmoContact(ctx context.Context, arg UpdateAmoContactParams) error {
_, err := q.db.ExecContext(ctx, updateAmoContact, arg.Field, arg.ID, arg.Amoid)
return err
}
const updateFieldRules = `-- name: UpdateFieldRules :exec
UPDATE rules SET FieldsRule = $1
WHERE AccountID = (SELECT AmoID FROM accountsAmo WHERE accountsAmo.AccountID = $2 AND accountsAmo.Deleted = false) AND QuizID = $3 AND Deleted = false

@ -288,3 +288,11 @@ type AmoUsersTrueResults struct {
QuizAccountID string
DriveURL string
}
// возможно стоит добавить enum? тип ContactQuizConfig уже есть
type ContactAmo struct {
ID int64
AccountID int32 // id аккаунта в амо к которому привязан контакт
AmoID int32 // id контакта в амо
Field string // значение поля
}

@ -6,6 +6,7 @@ import (
"encoding/json"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
"time"
)
@ -1080,3 +1081,60 @@ func (r *AmoRepository) UpdatingDealAmoStatus(ctx context.Context, deps SaveDeal
return nil
}
// методы для contact в амо
func (r *AmoRepository) GetExistingContactAmo(ctx context.Context, accountID int32, fields []string) (map[int32][]model.ContactAmo, error) {
rows, err := r.queries.GetExistingContactAmo(ctx, sqlcgen.GetExistingContactAmoParams{
Accountid: accountID,
Column2: fields,
})
if err != nil {
if err == sql.ErrNoRows {
return nil, pj_errors.ErrNotFound
}
return nil, err
}
result := make(map[int32][]model.ContactAmo)
for _, row := range rows {
result[row.Amoid] = append(result[row.Amoid], model.ContactAmo{
ID: row.ID,
AmoID: row.Amoid,
AccountID: row.Accountid,
Field: row.Field,
})
}
return result, nil
}
func (r *AmoRepository) InsertContactAmo(ctx context.Context, val model.ContactAmo) (int32, error) {
amoID, err := r.queries.InsertContactAmo(ctx, sqlcgen.InsertContactAmoParams{
Accountid: val.AccountID,
Amoid: val.AmoID,
Field: val.Field,
})
if err != nil {
return 0, err
}
return amoID, err
}
func (r *AmoRepository) UpdateAmoContact(ctx context.Context, id int64, field string, newAmoID int32) error {
err := r.queries.UpdateAmoContact(ctx, sqlcgen.UpdateAmoContactParams{
Field: field,
ID: id,
Amoid: newAmoID,
})
if err != nil {
return err
}
return nil
}

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