Update Voucher
This commit is contained in:
@@ -59,6 +59,7 @@ type RepoManagerImpl struct {
|
||||
TransactionRepo TransactionRepo
|
||||
MemberRepository MemberRepository
|
||||
PartnerSetting PartnerSettingsRepository
|
||||
UndianRepository UndianRepo
|
||||
}
|
||||
|
||||
func NewRepoManagerImpl(db *gorm.DB, cfg *config.Config) *RepoManagerImpl {
|
||||
@@ -90,6 +91,7 @@ func NewRepoManagerImpl(db *gorm.DB, cfg *config.Config) *RepoManagerImpl {
|
||||
MemberRepository: NewMemberRepository(db),
|
||||
InProgressOrderRepo: NewInProgressOrderRepository(db),
|
||||
PartnerSetting: NewPartnerSettingsRepository(db),
|
||||
UndianRepository: NewUndianRepository(db),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"enaklo-pos-be/internal/common/logger"
|
||||
"enaklo-pos-be/internal/common/mycontext"
|
||||
"enaklo-pos-be/internal/entity"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type UndianRepo interface {
|
||||
GetUndianEventByID(ctx context.Context, id int64) (*entity.UndianEventDB, error)
|
||||
GetActiveUndianEvents(ctx context.Context) ([]*entity.UndianEventDB, error)
|
||||
CreateUndianVouchers(ctx context.Context, vouchers []*entity.UndianVoucherDB) error
|
||||
GetNextVoucherSequence(ctx mycontext.Context) (int64, error)
|
||||
GetNextVoucherSequenceBatch(ctx mycontext.Context, count int) (int64, error)
|
||||
}
|
||||
|
||||
type undianRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewUndianRepository(db *gorm.DB) *undianRepository {
|
||||
return &undianRepository{
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *undianRepository) GetUndianEventByID(ctx context.Context, id int64) (*entity.UndianEventDB, error) {
|
||||
event := new(entity.UndianEventDB)
|
||||
if err := r.db.WithContext(ctx).First(event, id).Error; err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when get undian event by id", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
return event, nil
|
||||
}
|
||||
|
||||
func (r *undianRepository) GetActiveUndianEvents(ctx context.Context) ([]*entity.UndianEventDB, error) {
|
||||
var events []*entity.UndianEventDB
|
||||
now := time.Now()
|
||||
|
||||
if err := r.db.WithContext(ctx).
|
||||
Where("status = 'active' AND start_date <= ? AND end_date >= ?", now, now).
|
||||
Find(&events).Error; err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when get active undian events", zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return events, nil
|
||||
}
|
||||
|
||||
func (r *undianRepository) CreateUndianVouchers(ctx context.Context, vouchers []*entity.UndianVoucherDB) error {
|
||||
err := r.db.WithContext(ctx).Create(&vouchers).Error
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when create undian vouchers", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *undianRepository) GetNextVoucherSequence(ctx mycontext.Context) (int64, error) {
|
||||
var sequence int64
|
||||
|
||||
err := r.db.WithContext(ctx).Raw("SELECT nextval('voucher_sequence')").Scan(&sequence).Error
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when get next voucher sequence", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return sequence, nil
|
||||
}
|
||||
|
||||
func (r *undianRepository) GetNextVoucherSequenceBatch(ctx mycontext.Context, count int) (int64, error) {
|
||||
var startSequence int64
|
||||
|
||||
query := fmt.Sprintf("SELECT nextval('voucher_sequence') + %d - %d", count-1, count-1)
|
||||
err := r.db.WithContext(ctx).Raw(query).Scan(&startSequence).Error
|
||||
if err != nil {
|
||||
logger.ContextLogger(ctx).Error("error when get batch voucher sequence", zap.Error(err))
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return startSequence, nil
|
||||
}
|
||||
Reference in New Issue
Block a user