house/backend/routes/task-get.go
2025-06-14 23:47:44 -04:00

57 lines
1.2 KiB
Go

package routes
import (
"net/http"
"git.red-panda.pet/pandaware/house/backend/db"
"git.red-panda.pet/pandaware/house/backend/middleware"
"git.red-panda.pet/pandaware/house/backend/router"
)
func init() {
routes["GET"]["/task"] = new(TasksGET)
}
type tasksResponse struct {
Tasks []db.Task `json:"tasks"`
Categories []db.Category `json:"categories"`
}
type TasksGET struct{}
// Authorize implements router.AuthorizedRoute.
func (t *TasksGET) Authorize(ctx *router.Context) error {
return middleware.Authenticated(ctx)
}
// Handle implements router.Route.
func (t *TasksGET) Handle(ctx *router.Context) error {
tx, err := ctx.DB.BeginTx(ctx, nil)
if err != nil {
return ctx.GenericError(err, http.StatusInternalServerError)
}
query := ctx.Query.WithTx(tx)
tasks, err := query.AllTasks(ctx)
if err != nil {
return ctx.GenericError(err, http.StatusInternalServerError)
}
taskIDs := make([]int64, len(tasks))
for i, t := range tasks {
taskIDs[i] = t.ID
}
categories, err := query.CategoriesOf(ctx, taskIDs)
if err != nil {
return ctx.GenericError(err, http.StatusInternalServerError)
}
return ctx.JSON(200, tasksResponse{
Tasks: tasks,
Categories: categories,
})
}
var _ router.AuthorizedRoute = new(TasksGET)