codeword/internal/services/promocode_service.go
2024-01-12 14:28:22 +03:00

61 lines
1.7 KiB
Go

package services
import (
"codeword/internal/models"
"context"
"go.uber.org/zap"
)
type PromoCodeRepository interface {
CreatePromoCode(ctx context.Context, req *models.PromoCode) (*models.PromoCode, error)
EditPromoCode(ctx context.Context, req *models.ReqEditPromoCode) (*models.PromoCode, error)
GetPromoCodesList(ctx context.Context, req *models.GetPromoCodesListReq) ([]models.PromoCode, int64, error)
}
type PromoDeps struct {
Logger *zap.Logger
PromoCodeRepo PromoCodeRepository
}
type PromoCodeService struct {
logger *zap.Logger
promoCodeRepo PromoCodeRepository
}
func NewPromoCodeService(deps PromoDeps) *PromoCodeService {
return &PromoCodeService{
logger: deps.Logger,
promoCodeRepo: deps.PromoCodeRepo,
}
}
func (s *PromoCodeService) CreatePromoCode(ctx context.Context, req *models.PromoCode) (*models.PromoCode, error) {
promoCode, err := s.promoCodeRepo.CreatePromoCode(ctx, req)
if err != nil {
s.logger.Error("Failed to add promocode in database", zap.Error(err))
return nil, err
}
return promoCode, nil
}
func (s *PromoCodeService) EditPromoCode(ctx context.Context, req *models.ReqEditPromoCode) (*models.PromoCode, error) {
editedPromoCode, err := s.promoCodeRepo.EditPromoCode(ctx, req)
if err != nil {
s.logger.Error("Failed to edit promocode in database", zap.Error(err))
return nil, err
}
return editedPromoCode, nil
}
func (s *PromoCodeService) GetPromoCodesList(ctx context.Context, req *models.GetPromoCodesListReq) ([]models.PromoCode, int64, error) {
promoCodes, count, err := s.promoCodeRepo.GetPromoCodesList(ctx, req)
if err != nil {
s.logger.Error("Failed to get list promocodes from database", zap.Error(err))
return nil, 0, err
}
return promoCodes, count, nil
}