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 }