Merge branch 'expiredPr' into 'main'

Expired pr

See merge request backend/quiz/common!21
This commit is contained in:
Mikhail 2024-06-04 21:44:54 +00:00
commit cff3083d9c
6 changed files with 120 additions and 28 deletions

@ -266,11 +266,19 @@ DELETE FROM privileges WHERE id = $1;
-- name: GetQuizConfig :one -- name: GetQuizConfig :one
SELECT config, accountid FROM quiz WHERE id = $1 AND deleted = false; SELECT config, accountid FROM quiz WHERE id = $1 AND deleted = false;
-- name: GetExpiredPrivilege :many -- name: GetExpiredDayPrivilege :many
SELECT id, privilegeID, privilege_name, amount, created_at SELECT p.id, p.privilegeID, p.privilege_name, p.amount, p.created_at, a.user_id
FROM privileges FROM privileges p
WHERE created_at + amount * interval '1 day' < NOW() JOIN account a ON p.account_id = a.id
AND privilegeid = $1; WHERE p.created_at + p.amount * interval '1 day' < NOW()
AND p.privilegeID = $1;
-- name: GetExpiredCountPrivilege :many
SELECT p.id, p.privilegeID, p.privilege_name, p.amount, p.created_at, a.user_id
FROM privileges p
JOIN account a ON p.account_id = a.id
WHERE p.amount = 0
AND p.privilegeID = $1;
-- name: CheckAndAddDefault :exec -- name: CheckAndAddDefault :exec
UPDATE privileges UPDATE privileges

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.25.0 // sqlc v1.26.0
package sqlcgen package sqlcgen

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.25.0 // sqlc v1.26.0
package sqlcgen package sqlcgen

@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT. // Code generated by sqlc. DO NOT EDIT.
// versions: // versions:
// sqlc v1.25.0 // sqlc v1.26.0
// source: queries.sql // source: queries.sql
package sqlcgen package sqlcgen
@ -1477,36 +1477,86 @@ func (q *Queries) GetCurrentAccount(ctx context.Context, accountid string) (User
return i, err return i, err
} }
const getExpiredPrivilege = `-- name: GetExpiredPrivilege :many const getExpiredCountPrivilege = `-- name: GetExpiredCountPrivilege :many
SELECT id, privilegeID, privilege_name, amount, created_at SELECT p.id, p.privilegeID, p.privilege_name, p.amount, p.created_at, a.user_id
FROM privileges FROM privileges p
WHERE created_at + amount * interval '1 day' < NOW() JOIN account a ON p.account_id = a.id
AND privilegeid = $1 WHERE p.amount = 0
AND p.privilegeID = $1
` `
type GetExpiredPrivilegeRow struct { type GetExpiredCountPrivilegeRow struct {
ID int32 `db:"id" json:"id"` ID int32 `db:"id" json:"id"`
Privilegeid sql.NullString `db:"privilegeid" json:"privilegeid"` Privilegeid sql.NullString `db:"privilegeid" json:"privilegeid"`
PrivilegeName sql.NullString `db:"privilege_name" json:"privilege_name"` PrivilegeName sql.NullString `db:"privilege_name" json:"privilege_name"`
Amount sql.NullInt32 `db:"amount" json:"amount"` Amount sql.NullInt32 `db:"amount" json:"amount"`
CreatedAt sql.NullTime `db:"created_at" json:"created_at"` CreatedAt sql.NullTime `db:"created_at" json:"created_at"`
UserID sql.NullString `db:"user_id" json:"user_id"`
} }
func (q *Queries) GetExpiredPrivilege(ctx context.Context, privilegeid sql.NullString) ([]GetExpiredPrivilegeRow, error) { func (q *Queries) GetExpiredCountPrivilege(ctx context.Context, privilegeid sql.NullString) ([]GetExpiredCountPrivilegeRow, error) {
rows, err := q.db.QueryContext(ctx, getExpiredPrivilege, privilegeid) rows, err := q.db.QueryContext(ctx, getExpiredCountPrivilege, privilegeid)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer rows.Close() defer rows.Close()
var items []GetExpiredPrivilegeRow var items []GetExpiredCountPrivilegeRow
for rows.Next() { for rows.Next() {
var i GetExpiredPrivilegeRow var i GetExpiredCountPrivilegeRow
if err := rows.Scan( if err := rows.Scan(
&i.ID, &i.ID,
&i.Privilegeid, &i.Privilegeid,
&i.PrivilegeName, &i.PrivilegeName,
&i.Amount, &i.Amount,
&i.CreatedAt, &i.CreatedAt,
&i.UserID,
); 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 getExpiredDayPrivilege = `-- name: GetExpiredDayPrivilege :many
SELECT p.id, p.privilegeID, p.privilege_name, p.amount, p.created_at, a.user_id
FROM privileges p
JOIN account a ON p.account_id = a.id
WHERE p.created_at + p.amount * interval '1 day' < NOW()
AND p.privilegeID = $1
`
type GetExpiredDayPrivilegeRow struct {
ID int32 `db:"id" json:"id"`
Privilegeid sql.NullString `db:"privilegeid" json:"privilegeid"`
PrivilegeName sql.NullString `db:"privilege_name" json:"privilege_name"`
Amount sql.NullInt32 `db:"amount" json:"amount"`
CreatedAt sql.NullTime `db:"created_at" json:"created_at"`
UserID sql.NullString `db:"user_id" json:"user_id"`
}
func (q *Queries) GetExpiredDayPrivilege(ctx context.Context, privilegeid sql.NullString) ([]GetExpiredDayPrivilegeRow, error) {
rows, err := q.db.QueryContext(ctx, getExpiredDayPrivilege, privilegeid)
if err != nil {
return nil, err
}
defer rows.Close()
var items []GetExpiredDayPrivilegeRow
for rows.Next() {
var i GetExpiredDayPrivilegeRow
if err := rows.Scan(
&i.ID,
&i.Privilegeid,
&i.PrivilegeName,
&i.Amount,
&i.CreatedAt,
&i.UserID,
); err != nil { ); err != nil {
return nil, err return nil, err
} }

@ -266,6 +266,11 @@ type ShortPrivilege struct {
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
} }
type ExpiredPrivileges struct {
UserID string
Privilege ShortPrivilege
}
type Account struct { type Account struct {
ID string `json:"id"` ID string `json:"id"`
UserID string `json:"user_id"` UserID string `json:"user_id"`

@ -11,19 +11,19 @@ import (
) )
type Deps struct { type Deps struct {
Queries *sqlcgen.Queries Queries *sqlcgen.Queries
Pool *sql.DB Pool *sql.DB
} }
type AccountRepository struct { type AccountRepository struct {
queries *sqlcgen.Queries queries *sqlcgen.Queries
pool *sql.DB pool *sql.DB
} }
func NewAccountRepository(deps Deps) *AccountRepository { func NewAccountRepository(deps Deps) *AccountRepository {
return &AccountRepository{ return &AccountRepository{
queries: deps.Queries, queries: deps.Queries,
pool: deps.Pool, pool: deps.Pool,
} }
} }
@ -206,13 +206,13 @@ func (r *AccountRepository) InsertPrivilege(ctx context.Context, privilege *mode
} }
// test + // test +
func (r *AccountRepository) GetExpired(ctx context.Context, privilegeID string) ([]model.ShortPrivilege, error) { func (r *AccountRepository) GetExpired(ctx context.Context, privilegeID string) ([]model.ExpiredPrivileges, error) {
rows, err := r.queries.GetExpiredPrivilege(ctx, sql.NullString{String: privilegeID, Valid: privilegeID != ""}) rows, err := r.queries.GetExpiredDayPrivilege(ctx, sql.NullString{String: privilegeID, Valid: privilegeID != ""})
if err != nil { if err != nil {
return nil, err return nil, err
} }
var expiredRecords []model.ShortPrivilege var expiredRecords []model.ExpiredPrivileges
for _, row := range rows { for _, row := range rows {
privilege := model.ShortPrivilege{ privilege := model.ShortPrivilege{
@ -222,7 +222,36 @@ func (r *AccountRepository) GetExpired(ctx context.Context, privilegeID string)
Amount: uint64(row.Amount.Int32), Amount: uint64(row.Amount.Int32),
CreatedAt: row.CreatedAt.Time, CreatedAt: row.CreatedAt.Time,
} }
expiredRecords = append(expiredRecords, privilege) expiredRecords = append(expiredRecords, model.ExpiredPrivileges{
UserID: row.UserID.String,
Privilege: privilege,
})
}
return expiredRecords, nil
}
func (r *AccountRepository) GetExpiredCount(ctx context.Context, privilegeID string) ([]model.ExpiredPrivileges, error) {
rows, err := r.queries.GetExpiredCountPrivilege(ctx, sql.NullString{String: privilegeID, Valid: privilegeID != ""})
if err != nil {
return nil, err
}
var expiredRecords []model.ExpiredPrivileges
for _, row := range rows {
privilege := model.ShortPrivilege{
ID: fmt.Sprintf("%d", row.ID),
PrivilegeID: row.Privilegeid.String,
PrivilegeName: row.PrivilegeName.String,
Amount: uint64(row.Amount.Int32),
CreatedAt: row.CreatedAt.Time,
}
expiredRecords = append(expiredRecords, model.ExpiredPrivileges{
UserID: row.UserID.String,
Privilege: privilege,
})
} }