71 lines
2.1 KiB
Go
71 lines
2.1 KiB
Go
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")
|
|
}
|