2024-01-11 16:29:53 +00:00
|
|
|
package services
|
|
|
|
|
|
|
|
import (
|
|
|
|
"codeword/internal/models"
|
|
|
|
"context"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
)
|
|
|
|
|
|
|
|
type PromoCodeRepository interface {
|
2024-01-12 11:28:22 +00:00
|
|
|
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)
|
2024-01-12 13:46:36 +00:00
|
|
|
ActivatePromo(ctx context.Context, req *models.ActivateReq) (string, error)
|
2024-01-12 14:50:53 +00:00
|
|
|
DeletePromoCode(ctx context.Context, promoCodeID string) error
|
2024-01-11 16:29:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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) {
|
2024-01-11 18:23:15 +00:00
|
|
|
promoCode, err := s.promoCodeRepo.CreatePromoCode(ctx, req)
|
2024-01-11 18:20:33 +00:00
|
|
|
if err != nil {
|
|
|
|
s.logger.Error("Failed to add promocode in database", zap.Error(err))
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return promoCode, nil
|
2024-01-11 16:29:53 +00:00
|
|
|
}
|
2024-01-11 19:47:54 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2024-01-12 11:28:22 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
2024-01-12 13:46:36 +00:00
|
|
|
|
|
|
|
func (s *PromoCodeService) ActivatePromo(ctx context.Context, req *models.ActivateReq) (string, error) {
|
|
|
|
greetings, err := s.promoCodeRepo.ActivatePromo(ctx, req)
|
|
|
|
if err != nil {
|
|
|
|
s.logger.Error("Failed to activate promocode", zap.Error(err))
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
|
|
|
|
return greetings, nil
|
|
|
|
}
|
2024-01-12 14:50:53 +00:00
|
|
|
|
|
|
|
func (s *PromoCodeService) DeletePromoCode(ctx context.Context, promoCodeID string) error {
|
|
|
|
err := s.promoCodeRepo.DeletePromoCode(ctx, promoCodeID)
|
|
|
|
if err != nil {
|
|
|
|
s.logger.Error("Failed simple delete promocode from database", zap.Error(err))
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|