package handler import ( "time" "github.com/gin-gonic/gin" "github.com/sundynix/pets-be/internal/middleware" "github.com/sundynix/pets-be/internal/service" "github.com/sundynix/pets-be/pkg/response" ) type reminderReq struct { Type string `json:"type"` Title string `json:"title"` NextDueDate string `json:"next_due_date"` // YYYY-MM-DD Frequency string `json:"frequency"` } // ListReminders GET /api/pets/:id/reminders func (h *Handler) ListReminders(c *gin.Context) { reminders, err := h.svc.ListReminders(middleware.UserID(c), uintParam(c, "id")) if err != nil { respondErr(c, err) return } response.OK(c, reminders) } // CreateReminder POST /api/pets/:id/reminders func (h *Handler) CreateReminder(c *gin.Context) { var req reminderReq if err := c.ShouldBindJSON(&req); err != nil { response.FailParams(c, err.Error()) return } in := service.ReminderInput{Type: req.Type, Title: req.Title, Frequency: req.Frequency} if req.NextDueDate != "" { if t, err := time.Parse("2006-01-02", req.NextDueDate); err == nil { in.NextDueDate = &t } } r, err := h.svc.CreateReminder(middleware.UserID(c), uintParam(c, "id"), in) if err != nil { respondErr(c, err) return } response.OK(c, r) } // UpdateReminder PUT /api/reminders/:id func (h *Handler) UpdateReminder(c *gin.Context) { var req reminderReq if err := c.ShouldBindJSON(&req); err != nil { response.FailParams(c, err.Error()) return } fields := map[string]any{} if req.Title != "" { fields["title"] = req.Title } if req.Frequency != "" { fields["frequency"] = req.Frequency } if req.NextDueDate != "" { if t, err := time.Parse("2006-01-02", req.NextDueDate); err == nil { fields["next_due_date"] = t } } r, err := h.svc.UpdateReminder(middleware.UserID(c), uintParam(c, "id"), fields) if err != nil { respondErr(c, err) return } response.OK(c, r) } // DeleteReminder DELETE /api/reminders/:id func (h *Handler) DeleteReminder(c *gin.Context) { if err := h.svc.DeleteReminder(middleware.UserID(c), uintParam(c, "id")); err != nil { respondErr(c, err) return } response.OK(c, gin.H{"deleted": true}) }