import { FastifyInstance } from "fastify"; import { $task } from "./task.schema"; import { createTaskHandler, deleteTaskHandler, getTaskHandler, listTaskHandler, newFilesHandler, searchTaskHandler, updateTaskHandler, } from "./task.controller"; import { noteRoutes } from "../note/note.route"; export async function taskRoutes(fastify: FastifyInstance) { fastify.post( "/", { schema: { body: $task("createTaskInput"), }, config: { requiredClaims: ["task:write"] }, preHandler: [fastify.authorize], }, createTaskHandler ); fastify.get( "/:taskId", { schema: { params: { type: "object", properties: { taskId: { type: "string" }, }, }, }, config: { requiredClaims: ["task:read"] }, preHandler: [fastify.authorize], }, getTaskHandler ); fastify.get( "/", { schema: { querystring: $task("pageQueryParams"), }, config: { requiredClaims: ["task:read"] }, preHandler: [fastify.authorize], }, listTaskHandler ); fastify.patch( "/:taskId", { schema: { params: { type: "object", properties: { taskId: { type: "string" } }, }, body: $task("updateTaskInput"), }, }, updateTaskHandler ); fastify.delete( "/:taskId", { schema: { params: { type: "object", properties: { taskId: { type: "string" } }, }, }, config: { requiredClaims: ["task:delete"] }, preHandler: [fastify.authorize], }, deleteTaskHandler ); fastify.get( "/search", { schema: { querystring: $task("pageQueryParams"), }, config: { requiredClaims: ["task:read"] }, preHandler: [fastify.authorize], }, searchTaskHandler ); fastify.post( "/:taskId/files", { schema: { body: $task("uploadTaskInput"), }, config: { requiredClaims: ["rts:write"] }, preHandler: [fastify.authorize], }, newFilesHandler ); await noteRoutes(fastify, { read: "task:read", write: "task:write", delete: "task:delete", }); }