diff --git a/tp_note_2023_2024/prisma/dev.db b/tp_note_2023_2024/prisma/dev.db index 92ac8b423c734ca85427625327704038a29ed206..bd6a8b3c7e0e47213d688d8a7bb7e1e2ba296f58 100644 Binary files a/tp_note_2023_2024/prisma/dev.db and b/tp_note_2023_2024/prisma/dev.db differ diff --git a/tp_note_2023_2024/src/requestHandlers/project.ts b/tp_note_2023_2024/src/requestHandlers/project.ts index 9c3e92ee0260b23768327660e233d7c8bd749760..02aff9445e3391ce4b826c1f44472dd6ca7681b5 100644 --- a/tp_note_2023_2024/src/requestHandlers/project.ts +++ b/tp_note_2023_2024/src/requestHandlers/project.ts @@ -2,4 +2,65 @@ import { prisma } from '../db'; import type { Request, Response } from 'express'; import { HttpError } from '../error'; import { assert } from 'superstruct'; +import { ProjectUpdateData } from "../validation/project"; +import { responde } from "../functions"; +export async function update_one(req: Request, res: Response) { + + assert(req.body, ProjectUpdateData); + + const project = await prisma.project.update({ + where: { id: Number(req.params.project_id) }, + data: req.body, + include: { + tasks: true, + } + }); + if (project == null) { + throw new HttpError("Project doesn't exist", 404); + } + responde(res, 200, "Project succesfully updated.", project); +} + + +export async function delete_one(req: Request, res: Response) { + const project = await prisma.project.delete({ + where: { id: Number(req.params.project_id) } + }); + if (project == null) { + throw new HttpError("Project doesn't exist", 404); + } + responde(res, 204, "Project succesfully deleted."); +} + +export async function get_project_tasks(req: Request, res: Response) { + const project = await prisma.project.findUnique({ + where: { id: Number(req.params.project_id) }, + include: { + tasks: true, + }, + }); + if (project == null) { + throw new HttpError("Project doesn't exist", 404); + } + res.status(200).json(project.tasks); +} + +export async function create_project_task(req: Request, res: Response) { + const project = await prisma.project.update({ + where: { id: Number(req.params.project_id) }, + data: { + tasks: { + create: req.body, + }, + }, + include: { + tasks: true, + }, + }); + + if (project == null) { + throw new HttpError("Project doesn't exist", 404); + } + responde(res, 201, "Task succesfully created.", project.tasks); +} diff --git a/tp_note_2023_2024/src/requestHandlers/user.ts b/tp_note_2023_2024/src/requestHandlers/user.ts index 72c7c105396d2d46a26e880d3998da89bcec3cc6..9de48c46635c60e5183170128d975d0ee09f5ac8 100644 --- a/tp_note_2023_2024/src/requestHandlers/user.ts +++ b/tp_note_2023_2024/src/requestHandlers/user.ts @@ -9,9 +9,13 @@ import { ProjectCreationData } from '../validation/project'; export async function get_all(req: Request, res: Response) { const users = await prisma.user.findMany({ - include : { - createdProjects: true - } + include: { + createdProjects: { + include: { + tasks: true, + }, + }, + }, }); res.status(200).json(users); } @@ -20,7 +24,11 @@ export async function get_one(req: Request, res: Response) { const user = await prisma.user.findUnique({ where: { id: Number(req.params.user_id) }, include: { - createdProjects: true, + createdProjects: { + include: { + tasks: true, + }, + }, }, }); if (user == null) { @@ -41,6 +49,9 @@ export async function update_one(req: Request, res: Response) { const user = await prisma.user.update({ where: { id: Number(req.params.user_id) }, data: req.body, + include: { + createdProjects: true, + }, }); responde(res, 200, "User succesfully updated.", user); } @@ -50,7 +61,7 @@ export async function delete_one(req: Request, res: Response) { if (user == null) { throw new HttpError("User doesn't exist", 404) } - responde(res, 200, "User succesfully deleted."); + responde(res, 204, "User succesfully deleted."); } export async function create_user_project(req: Request, res: Response) { @@ -64,6 +75,9 @@ export async function create_user_project(req: Request, res: Response) { create: req.body } }, + include: { + createdProjects: true, + } }); if (user == null) { throw new HttpError("User doesn't exist", 404); @@ -75,7 +89,11 @@ export async function get_user_project(req: Request, res: Response) { const user = await prisma.user.findUnique({ where: { id: Number(req.params.user_id) }, include: { - createdProjects: true, + createdProjects: { + include: { + tasks: true + } + }, }, }); if (user == null) { diff --git a/tp_note_2023_2024/src/routes/routes_projects.ts b/tp_note_2023_2024/src/routes/routes_projects.ts index 65ecbf9500ef7583b24cfdc189b1512c8cf4b03c..695ade1abf15db5c3b6374f1f9ccc8327fe39c49 100644 --- a/tp_note_2023_2024/src/routes/routes_projects.ts +++ b/tp_note_2023_2024/src/routes/routes_projects.ts @@ -1,6 +1,11 @@ import express from "express"; -import * as user from "../requestHandlers/user"; +import * as project from "../requestHandlers/project"; var ex = require("express"), router = ex.Router(); +router.patch("/:project_id", project.update_one); +router.delete("/:project_id", project.delete_one); +router.get("/:project_id/tasks", project.get_project_tasks); +router.post("/:project_id/tasks", project.create_project_task); + module.exports = router; diff --git a/tp_note_2023_2024/src/validation/project.ts b/tp_note_2023_2024/src/validation/project.ts index f99cb945557009aa0d9fb9f5ae81f85f5dfe0fd8..d7519635b1be3332d053214ac0a6da11f9a9c1d8 100644 --- a/tp_note_2023_2024/src/validation/project.ts +++ b/tp_note_2023_2024/src/validation/project.ts @@ -3,8 +3,6 @@ import { object, string, optional, size, partial, integer, array } from 'superst export const ProjectCreationData = object({ name: string(), description: optional(string()), - creatorId: integer(), - tasks: optional(array()) }); export const ProjectUpdateData = partial(ProjectCreationData); \ No newline at end of file