diff --git a/src/note/note.service.ts b/src/note/note.service.ts index 5904bf3..44dbcea 100644 --- a/src/note/note.service.ts +++ b/src/note/note.service.ts @@ -33,7 +33,7 @@ export async function updateNote( }, { ...input }, { new: true } - ); + ).populate({path: 'createdBy', select: 'pid name avatar'}); } export async function listNotes(resourceId: string, tenantId: string) { diff --git a/src/task/task.controller.ts b/src/task/task.controller.ts index 56e1c4c..08f7b9a 100644 --- a/src/task/task.controller.ts +++ b/src/task/task.controller.ts @@ -1,10 +1,11 @@ import { FastifyReply, FastifyRequest } from "fastify"; -import { CreateTaskInput, UpdateTaskInput } from "./task.schema"; +import { CreateTaskInput, UpdateTaskInput, UploadTaskInput } from "./task.schema"; import { createTask, deleteTask, getTask, listTasks, + newUpload, searchTasks, updateTask, } from "./task.service"; @@ -97,3 +98,17 @@ export async function searchTaskHandler( return err; } } + +export async function newFilesHandler(req: FastifyRequest, res: FastifyReply) { + const input = req.body as UploadTaskInput; + const { taskId } = req.params as { taskId: string }; + + try { + const updatedTask = await newUpload(taskId, input, req.user); + if (!updateTask) return res.code(404).send({ error: "resource not found" }); + + return res.code(200).send(updateTask); + } catch (err) { + return err; + } +} \ No newline at end of file diff --git a/src/task/task.route.ts b/src/task/task.route.ts index aec6674..bdfea1b 100644 --- a/src/task/task.route.ts +++ b/src/task/task.route.ts @@ -5,6 +5,7 @@ import { deleteTaskHandler, getTaskHandler, listTaskHandler, + newFilesHandler, searchTaskHandler, updateTaskHandler, } from "./task.controller"; @@ -94,6 +95,18 @@ export async function taskRoutes(fastify: FastifyInstance) { 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", diff --git a/src/task/task.schema.ts b/src/task/task.schema.ts index e075518..bab6a82 100644 --- a/src/task/task.schema.ts +++ b/src/task/task.schema.ts @@ -86,13 +86,19 @@ const updateTaskInput = z.object({ .optional(), }); +const uploadTaskInput = z.object({ + files: z.array(files), +}); + export type CreateTaskInput = z.infer; export type UpdateTaskInput = z.infer; +export type UploadTaskInput = z.infer; export const { schemas: taskSchemas, $ref: $task } = buildJsonSchemas( { createTaskInput, updateTaskInput, + uploadTaskInput, pageQueryParams, }, { $id: "task" } diff --git a/src/task/task.service.ts b/src/task/task.service.ts index fb74e02..0e9a03d 100644 --- a/src/task/task.service.ts +++ b/src/task/task.service.ts @@ -6,6 +6,7 @@ import { taskFields, taskModel, UpdateTaskInput, + UploadTaskInput, } from "./task.schema"; export async function createTask( @@ -227,3 +228,22 @@ export async function searchTasks(params: PageQueryParams, tenantId: string) { }, }; } + +export async function newUpload( + id: string, + newUpload: UploadTaskInput, + user: AuthenticatedUser +) { + return await taskModel.findOneAndUpdate( + { pid: id, tenantId: user.tenantId }, + { + $push: { + documents: { + files: newUpload.files, + createdAt: new Date(), + createdBy: user.userId, + }, + }, + } + ); +} \ No newline at end of file