codeword/internal/controller/promocode/promocode_controller.go

63 lines
2.0 KiB
Go
Raw Normal View History

2024-01-11 18:20:33 +00:00
package promocode
2024-01-11 16:29:53 +00:00
import (
"codeword/internal/models"
2024-01-11 18:20:33 +00:00
"codeword/internal/repository"
2024-01-11 16:29:53 +00:00
"codeword/internal/services"
2024-01-11 18:20:33 +00:00
"errors"
2024-01-11 16:29:53 +00:00
"github.com/gofiber/fiber/v2"
"go.uber.org/zap"
)
type PromoCodeController struct {
logger *zap.Logger
promoCodeService *services.PromoCodeService
}
func NewPromoCodeController(logger *zap.Logger, promoCodeService *services.PromoCodeService) *PromoCodeController {
return &PromoCodeController{
logger: logger,
promoCodeService: promoCodeService,
}
}
func (p *PromoCodeController) CreatePromoCode(c *fiber.Ctx) error {
var reqCreatePromoCode models.PromoCode
if err := c.BodyParser(&reqCreatePromoCode); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
}
createdPromoCode, err := p.promoCodeService.CreatePromoCode(c.Context(), &reqCreatePromoCode)
if err != nil {
p.logger.Error("Failed to create promocode", zap.Error(err))
2024-01-11 18:20:33 +00:00
if errors.Is(err, repository.ErrDuplicateCodeword) {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Duplicate Codeword"})
}
2024-01-11 16:29:53 +00:00
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"})
}
return c.Status(fiber.StatusCreated).JSON(createdPromoCode)
}
2024-01-11 19:47:54 +00:00
func (p *PromoCodeController) EditPromoCode(c *fiber.Ctx) error {
var reqEditPromoCode models.ReqEditPromoCode
if err := c.BodyParser(&reqEditPromoCode); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
}
editedPromoCode, err := p.promoCodeService.EditPromoCode(c.Context(), &reqEditPromoCode)
if err != nil {
p.logger.Error("Failed to edit promocode", zap.Error(err))
if errors.Is(err, repository.ErrPromoCodeNotFound) {
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": "PromoCode not found"})
}
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Internal Server Error"})
}
return c.Status(fiber.StatusOK).JSON(editedPromoCode)
}