package handlers import ( "net/http" "github.com/labstack/echo/v5" "trankilou.fr/lassistanoque/backend/internal/domain" "trankilou.fr/lassistanoque/backend/internal/service/auth" "trankilou.fr/lassistanoque/backend/internal/service/task" ) type TaskHandler struct { taskService *task.Service } func NewTaskGroup(prefix string, e *echo.Group, service *task.Service, middlewares ...echo.MiddlewareFunc) *echo.Group { taskHandler := &TaskHandler{taskService: service} auth := e.Group(prefix, middlewares...) auth.GET("/:space", taskHandler.List) auth.PUT("/:space/:id", taskHandler.Update) auth.DELETE("/:space/:id", taskHandler.Delete) return auth } func (h *TaskHandler) List(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") tasks, err := h.taskService.ListTasks(userID, teamID) if err != nil { c.Logger().Error("error listing tasks", "error", err) return echo.NewHTTPError(http.StatusBadRequest, "error listing tasks") } // évite "null" dans la réponse quand il n'y a pas de tâche if tasks == nil { tasks = []*domain.Task{} } return c.JSON(http.StatusOK, tasks) } func (h *TaskHandler) Update(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") taskID := c.Param("id") var taskModel domain.Task if err := c.Bind(&taskModel); err != nil { return echo.NewHTTPError(http.StatusBadRequest, "error binding request") } taskModel.ID = taskID updated, err := h.taskService.UpdateTask(userID, teamID, &taskModel) if err != nil { c.Logger().Error("error updating task", "error", err) return echo.NewHTTPError(http.StatusBadRequest, "error updating task") } return c.JSON(http.StatusOK, updated) } func (h *TaskHandler) Delete(c *echo.Context) error { userID := c.Get(auth.ContextUserIDKey).(string) teamID := c.Param("space") taskID := c.Param("id") if err := h.taskService.DeleteTask(userID, teamID, taskID); err != nil { c.Logger().Error("error deleting task", "error", err) return echo.NewHTTPError(http.StatusBadRequest, "error deleting task") } return c.JSON(http.StatusOK, "task deleted") }