add service
All checks were successful
Deploy Smart Search Backend Test / deploy (push) Successful in 1m36s
All checks were successful
Deploy Smart Search Backend Test / deploy (push) Successful in 1m36s
This commit is contained in:
@@ -37,7 +37,6 @@ type InviteRepository interface {
|
||||
CreateTx(ctx context.Context, tx pgx.Tx, invite *model.InviteCode) error
|
||||
FindByCode(ctx context.Context, code int64) (*model.InviteCode, error)
|
||||
FindActiveByCode(ctx context.Context, code int64) (*model.InviteCode, error)
|
||||
IncrementUsedCount(ctx context.Context, code int64) error
|
||||
DecrementCanBeUsedCountTx(ctx context.Context, tx pgx.Tx, code int64) error
|
||||
DeactivateExpired(ctx context.Context) (int, error)
|
||||
GetUserInvites(ctx context.Context, userID int) ([]*model.InviteCode, error)
|
||||
|
||||
@@ -53,7 +53,7 @@ func (r *inviteRepository) createWithExecutor(ctx context.Context, exec DBTX, in
|
||||
|
||||
func (r *inviteRepository) FindByCode(ctx context.Context, code int64) (*model.InviteCode, error) {
|
||||
query := r.qb.Select(
|
||||
"id", "user_id", "code", "can_be_used_count", "used_count",
|
||||
"id", "user_id", "code", "can_be_used_count",
|
||||
"is_active", "created_at", "expires_at",
|
||||
).From("invite_codes").Where(sq.Eq{"code": code})
|
||||
|
||||
@@ -65,7 +65,7 @@ func (r *inviteRepository) FindByCode(ctx context.Context, code int64) (*model.I
|
||||
invite := &model.InviteCode{}
|
||||
err = r.pool.QueryRow(ctx, sqlQuery, args...).Scan(
|
||||
&invite.ID, &invite.UserID, &invite.Code, &invite.CanBeUsedCount,
|
||||
&invite.UsedCount, &invite.IsActive, &invite.CreatedAt, &invite.ExpiresAt,
|
||||
&invite.IsActive, &invite.CreatedAt, &invite.ExpiresAt,
|
||||
)
|
||||
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
@@ -80,13 +80,13 @@ func (r *inviteRepository) FindByCode(ctx context.Context, code int64) (*model.I
|
||||
|
||||
func (r *inviteRepository) FindActiveByCode(ctx context.Context, code int64) (*model.InviteCode, error) {
|
||||
query := r.qb.Select(
|
||||
"id", "user_id", "code", "can_be_used_count", "used_count",
|
||||
"id", "user_id", "code", "can_be_used_count",
|
||||
"is_active", "created_at", "expires_at",
|
||||
).From("invite_codes").Where(sq.And{
|
||||
sq.Eq{"code": code},
|
||||
sq.Eq{"is_active": true},
|
||||
sq.Expr("expires_at > now()"),
|
||||
sq.Expr("can_be_used_count > used_count"),
|
||||
sq.Expr("can_be_used_count > 0"),
|
||||
})
|
||||
|
||||
sqlQuery, args, err := query.ToSql()
|
||||
@@ -97,7 +97,7 @@ func (r *inviteRepository) FindActiveByCode(ctx context.Context, code int64) (*m
|
||||
invite := &model.InviteCode{}
|
||||
err = r.pool.QueryRow(ctx, sqlQuery, args...).Scan(
|
||||
&invite.ID, &invite.UserID, &invite.Code, &invite.CanBeUsedCount,
|
||||
&invite.UsedCount, &invite.IsActive, &invite.CreatedAt, &invite.ExpiresAt,
|
||||
&invite.IsActive, &invite.CreatedAt, &invite.ExpiresAt,
|
||||
)
|
||||
|
||||
if errors.Is(err, pgx.ErrNoRows) {
|
||||
@@ -110,28 +110,10 @@ func (r *inviteRepository) FindActiveByCode(ctx context.Context, code int64) (*m
|
||||
return invite, nil
|
||||
}
|
||||
|
||||
func (r *inviteRepository) IncrementUsedCount(ctx context.Context, code int64) error {
|
||||
query := r.qb.Update("invite_codes").
|
||||
Set("used_count", sq.Expr("used_count + 1")).
|
||||
Where(sq.Eq{"code": code})
|
||||
|
||||
sqlQuery, args, err := query.ToSql()
|
||||
if err != nil {
|
||||
return errs.NewInternalError(errs.DatabaseError, "failed to build query", err)
|
||||
}
|
||||
|
||||
_, err = r.pool.Exec(ctx, sqlQuery, args...)
|
||||
if err != nil {
|
||||
return errs.NewInternalError(errs.DatabaseError, "failed to increment used count", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *inviteRepository) DecrementCanBeUsedCountTx(ctx context.Context, tx pgx.Tx, code int64) error {
|
||||
query := r.qb.Update("invite_codes").
|
||||
Set("used_count", sq.Expr("used_count + 1")).
|
||||
Set("is_active", sq.Expr("CASE WHEN used_count + 1 >= can_be_used_count THEN false ELSE is_active END")).
|
||||
Set("can_be_used_count", sq.Expr("can_be_used_count - 1")).
|
||||
Set("is_active", sq.Expr("CASE WHEN can_be_used_count - 1 <= 0 THEN false ELSE is_active END")).
|
||||
Where(sq.Eq{"code": code})
|
||||
|
||||
sqlQuery, args, err := query.ToSql()
|
||||
@@ -170,7 +152,7 @@ func (r *inviteRepository) DeactivateExpired(ctx context.Context) (int, error) {
|
||||
|
||||
func (r *inviteRepository) GetUserInvites(ctx context.Context, userID int) ([]*model.InviteCode, error) {
|
||||
query := r.qb.Select(
|
||||
"id", "user_id", "code", "can_be_used_count", "used_count",
|
||||
"id", "user_id", "code", "can_be_used_count",
|
||||
"is_active", "created_at", "expires_at",
|
||||
).From("invite_codes").
|
||||
Where(sq.Eq{"user_id": userID}).
|
||||
@@ -192,7 +174,7 @@ func (r *inviteRepository) GetUserInvites(ctx context.Context, userID int) ([]*m
|
||||
invite := &model.InviteCode{}
|
||||
err := rows.Scan(
|
||||
&invite.ID, &invite.UserID, &invite.Code, &invite.CanBeUsedCount,
|
||||
&invite.UsedCount, &invite.IsActive, &invite.CreatedAt, &invite.ExpiresAt,
|
||||
&invite.IsActive, &invite.CreatedAt, &invite.ExpiresAt,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errs.NewInternalError(errs.DatabaseError, "failed to scan invite", err)
|
||||
|
||||
Reference in New Issue
Block a user