package handler import ( "time" "github.com/gin-gonic/gin" "github.com/sundynix/pets-be/internal/middleware" "github.com/sundynix/pets-be/pkg/response" ) // ListTasks GET /api/pets/:id/tasks?date=YYYY-MM-DD func (h *Handler) ListTasks(c *gin.Context) { var date *time.Time if q := c.Query("date"); q != "" { if t, err := time.Parse("2006-01-02", q); err == nil { date = &t } } tasks, err := h.svc.ListTasks(middleware.UserID(c), uintParam(c, "id"), date) if err != nil { respondErr(c, err) return } response.OK(c, tasks) } // ToggleTask POST /api/tasks/:id/toggle func (h *Handler) ToggleTask(c *gin.Context) { task, err := h.svc.ToggleTask(middleware.UserID(c), uintParam(c, "id")) if err != nil { respondErr(c, err) return } response.OK(c, task) } // CompleteAllTasks POST /api/pets/:id/tasks/complete-all func (h *Handler) CompleteAllTasks(c *gin.Context) { tasks, err := h.svc.CompleteAllTasks(middleware.UserID(c), uintParam(c, "id")) if err != nil { respondErr(c, err) return } response.OK(c, tasks) } // GetPlan GET /api/pets/:id/plan func (h *Handler) GetPlan(c *gin.Context) { plan, err := h.svc.GetPlan(middleware.UserID(c), uintParam(c, "id")) if err != nil { respondErr(c, err) return } response.OK(c, plan) } // PlanCalendar GET /api/pets/:id/plan/calendar?month=YYYY-MM func (h *Handler) PlanCalendar(c *gin.Context) { now := time.Now() year, month := now.Year(), int(now.Month()) if q := c.Query("month"); q != "" { if t, err := time.Parse("2006-01", q); err == nil { year, month = t.Year(), int(t.Month()) } } res, err := h.svc.Calendar(middleware.UserID(c), uintParam(c, "id"), year, month) if err != nil { respondErr(c, err) return } response.OK(c, res) } type aiPlanReq struct { Input string `json:"input"` } // CreateAIPlan POST /api/pets/:id/ai-plan func (h *Handler) CreateAIPlan(c *gin.Context) { var req aiPlanReq if err := c.ShouldBindJSON(&req); err != nil { response.FailParams(c, err.Error()) return } plan, err := h.svc.CreateAIPlan(middleware.UserID(c), uintParam(c, "id"), req.Input) if err != nil { respondErr(c, err) return } response.OK(c, plan) } // ApplyAIPlan POST /api/ai-plan/:id/apply func (h *Handler) ApplyAIPlan(c *gin.Context) { plan, err := h.svc.ApplyAIPlan(middleware.UserID(c), uintParam(c, "id")) if err != nil { respondErr(c, err) return } response.OK(c, plan) } // TogglePlanTask POST /api/plan-tasks/:id/toggle func (h *Handler) TogglePlanTask(c *gin.Context) { if err := h.svc.TogglePlanTask(middleware.UserID(c), uintParam(c, "id")); err != nil { respondErr(c, err) return } response.OK(c, gin.H{"ok": true}) }