diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 815e7c9..1407fe0 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -1058,3 +1058,8 @@ SELECT * FROM fields WHERE AmoID = $1 AND Deleted = false; SELECT ID,AmoID,Code,AccountID,Name,Entity,Type FROM fields 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;; diff --git a/dal/sqlcgen/queries.sql.go b/dal/sqlcgen/queries.sql.go index 565ef4a..4f49350 100644 --- a/dal/sqlcgen/queries.sql.go +++ b/dal/sqlcgen/queries.sql.go @@ -832,6 +832,31 @@ func (q *Queries) CreateWebHook(ctx context.Context, arg CreateWebHookParams) er return err } +const decrementManual = `-- 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 +` + +type DecrementManualParams struct { + UserID sql.NullString `db:"user_id" json:"user_id"` + Privilegeid sql.NullString `db:"privilegeid" json:"privilegeid"` +} + +func (q *Queries) DecrementManual(ctx context.Context, arg DecrementManualParams) (Privilege, error) { + row := q.db.QueryRowContext(ctx, decrementManual, arg.UserID, arg.Privilegeid) + var i Privilege + err := row.Scan( + &i.ID, + &i.Privilegeid, + &i.AccountID, + &i.PrivilegeName, + &i.Amount, + &i.CreatedAt, + ) + return i, err +} + const deleteAccountById = `-- name: DeleteAccountById :exec DELETE FROM account WHERE id = $1 ` diff --git a/model/model.go b/model/model.go index 0119e49..3882503 100644 --- a/model/model.go +++ b/model/model.go @@ -191,6 +191,14 @@ var ( Type: "day", Value: "день", }, + { + PrivilegeID: "quizManual", + Name: "Заказать quiz", + ServiceKey: skey, + Description: "Закажите квиз и мы сделаем его в течении трех дней", + Type: "count", + Value: "шт", + }, } ) diff --git a/pj_errors/pg_error.go b/pj_errors/pg_error.go new file mode 100644 index 0000000..5ee2ba5 --- /dev/null +++ b/pj_errors/pg_error.go @@ -0,0 +1,5 @@ +package pj_errors + +import "errors" + +var ErrNotFound = errors.New("not found") diff --git a/repository/account/account.go b/repository/account/account.go index fec5f2a..473251e 100644 --- a/repository/account/account.go +++ b/repository/account/account.go @@ -7,6 +7,7 @@ import ( "github.com/google/uuid" "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" "strconv" ) @@ -344,3 +345,19 @@ func (r *AccountRepository) GetQidOwner(ctx context.Context, qId string) (string return userID, nil } + +func (r *AccountRepository) ManualDone(ctx context.Context, userID string) error { + _, err := r.queries.DecrementManual(ctx, sqlcgen.DecrementManualParams{ + UserID: sql.NullString{String: userID, Valid: true}, + Privilegeid: sql.NullString{String: "quizManual", Valid: true}, + }) + + if err != nil { + if err == sql.ErrNoRows { + return pj_errors.ErrNotFound + } + return err + } + + return nil +}