package announcement import ( "strconv" "strings" "github.com/gofiber/fiber/v2" ) type Handler struct { svc *Service } func NewHandler(svc *Service) *Handler { return &Handler{svc: svc} } func (h *Handler) GetAll(c *fiber.Ctx) error { list, err := h.svc.GetAll() if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "공지사항을 불러오지 못했습니다"}) } return c.JSON(list) } func (h *Handler) Create(c *fiber.Ctx) error { var body struct { Title string `json:"title"` Content string `json:"content"` } if err := c.BodyParser(&body); err != nil || body.Title == "" || body.Content == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "제목과 내용을 입력해주세요"}) } a, err := h.svc.Create(body.Title, body.Content) if err != nil { return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "공지사항 생성에 실패했습니다"}) } return c.Status(fiber.StatusCreated).JSON(a) } func (h *Handler) Update(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "유효하지 않은 공지사항 ID입니다"}) } var body struct { Title string `json:"title"` Content string `json:"content"` } if err := c.BodyParser(&body); err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "잘못된 요청입니다"}) } if body.Title == "" && body.Content == "" { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "수정할 내용을 입력해주세요"}) } a, err := h.svc.Update(uint(id), body.Title, body.Content) if err != nil { if strings.Contains(err.Error(), "찾을 수 없습니다") { return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": err.Error()}) } return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()}) } return c.JSON(a) } func (h *Handler) Delete(c *fiber.Ctx) error { id, err := strconv.ParseUint(c.Params("id"), 10, 64) if err != nil { return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "유효하지 않은 공지사항 ID입니다"}) } if err := h.svc.Delete(uint(id)); err != nil { if strings.Contains(err.Error(), "찾을 수 없습니다") { return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"error": err.Error()}) } return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "삭제에 실패했습니다"}) } return c.SendStatus(fiber.StatusNoContent) }