From 9a37f1aee2c28bb3a367415318c34b14e97d09df Mon Sep 17 00:00:00 2001
From: CARLUCCI Romain <romain.carlucci@etu.unistra.fr>
Date: Fri, 16 Feb 2024 14:55:36 +0100
Subject: [PATCH] aaa

---
 tp_note_2023_2024/prisma/dev.db               | Bin 36864 -> 36864 bytes
 .../src/requestHandlers/project.ts            |  61 ++++++++++++++++++
 tp_note_2023_2024/src/requestHandlers/user.ts |  30 +++++++--
 .../src/routes/routes_projects.ts             |   7 +-
 tp_note_2023_2024/src/validation/project.ts   |   2 -
 5 files changed, 91 insertions(+), 9 deletions(-)

diff --git a/tp_note_2023_2024/prisma/dev.db b/tp_note_2023_2024/prisma/dev.db
index 92ac8b423c734ca85427625327704038a29ed206..bd6a8b3c7e0e47213d688d8a7bb7e1e2ba296f58 100644
GIT binary patch
delta 19
acmZozz|^pSX@WFk!9*En#)6Fr3;F>=CkFxm

delta 19
acmZozz|^pSX@WFk%tRSy#+Z!>3;F>;`v%$o

diff --git a/tp_note_2023_2024/src/requestHandlers/project.ts b/tp_note_2023_2024/src/requestHandlers/project.ts
index 9c3e92e..02aff94 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 72c7c10..9de48c4 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 65ecbf9..695ade1 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 f99cb94..d751963 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
-- 
GitLab