package handlers import ( "net/http" "github.com/calendarapi/internal/middleware" "github.com/calendarapi/internal/models" "github.com/calendarapi/internal/service" "github.com/calendarapi/internal/utils" "github.com/go-chi/chi/v5" ) type TaskDependencyHandler struct { depSvc *service.TaskDependencyService } func NewTaskDependencyHandler(depSvc *service.TaskDependencyService) *TaskDependencyHandler { return &TaskDependencyHandler{depSvc: depSvc} } func (h *TaskDependencyHandler) ListBlockers(w http.ResponseWriter, r *http.Request) { userID, _ := middleware.GetUserID(r.Context()) taskID, err := utils.ValidateUUID(chi.URLParam(r, "id")) if err != nil { utils.WriteError(w, err) return } tasks, err := h.depSvc.ListBlockers(r.Context(), userID, taskID) if err != nil { utils.WriteError(w, err) return } utils.WriteList(w, tasks, models.PageInfo{Limit: len(tasks)}) } func (h *TaskDependencyHandler) Add(w http.ResponseWriter, r *http.Request) { userID, _ := middleware.GetUserID(r.Context()) taskID, err := utils.ValidateUUID(chi.URLParam(r, "id")) if err != nil { utils.WriteError(w, err) return } var req struct { BlocksTaskID string `json:"blocks_task_id"` } if err := utils.DecodeJSON(r, &req); err != nil { utils.WriteError(w, err) return } blocksTaskID, err := utils.ValidateUUID(req.BlocksTaskID) if err != nil { utils.WriteError(w, err) return } if err := h.depSvc.Add(r.Context(), userID, taskID, blocksTaskID); err != nil { utils.WriteError(w, err) return } utils.WriteOK(w) } func (h *TaskDependencyHandler) Remove(w http.ResponseWriter, r *http.Request) { userID, _ := middleware.GetUserID(r.Context()) taskID, err := utils.ValidateUUID(chi.URLParam(r, "id")) if err != nil { utils.WriteError(w, err) return } blocksTaskID, err := utils.ValidateUUID(chi.URLParam(r, "blocksTaskId")) if err != nil { utils.WriteError(w, err) return } if err := h.depSvc.Remove(r.Context(), userID, taskID, blocksTaskID); err != nil { utils.WriteError(w, err) return } utils.WriteOK(w) }