From 699821739965a86062fd9daa3b135363e05f23dc Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 9 Feb 2023 20:05:33 +0100 Subject: [PATCH] Refactor general pour ajout d'un flow CI/CD --- .dockerignore | 5 ++ .gitignore | 1 + Dockerfile | 13 +++ ReadMe.md | 21 ++++- app.js | 25 ------ docker-compose.yml | 36 ++++++++ groupeValidator.js | 10 --- jeuxValidator.js | 13 --- package-lock.json | 80 ++++++++++------- package.json | 13 +-- prisma/schema.prisma | 22 ++--- route/jeux.js | 81 ------------------ src/app.js | 27 ++++++ src/groupeValidator.js | 10 +++ ...g_33dc9ed2-6182-411c-b8d0-5210b54ebc45.png | Bin src/jeuxValidator.js | 13 +++ {route => src/route}/groupe.js | 48 +++++------ src/route/jeux.js | 81 ++++++++++++++++++ 18 files changed, 298 insertions(+), 201 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile delete mode 100644 app.js create mode 100644 docker-compose.yml delete mode 100644 groupeValidator.js delete mode 100644 jeuxValidator.js delete mode 100644 route/jeux.js create mode 100644 src/app.js create mode 100644 src/groupeValidator.js rename {img => src/img}/fabbbb_A_boys_dreams_for_a_girl_All_softness_and_poetry_He_imag_33dc9ed2-6182-411c-b8d0-5210b54ebc45.png (100%) create mode 100644 src/jeuxValidator.js rename {route => src/route}/groupe.js (54%) create mode 100644 src/route/jeux.js diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4a77931 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.dockerignore + +node_modules + +.vscode diff --git a/.gitignore b/.gitignore index 11ddd8d..574b920 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules +mysql-data # Keep environment variables out of version control .env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d0cf160 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:lts-hydrogen + +WORKDIR /app + +COPY package.json ./ +COPY package-lock.json ./ +COPY .env ./ +ADD src ./src/ +ADD prisma ./prisma/ + +RUN npm ci +RUN npx prisma generate +CMD npm start \ No newline at end of file diff --git a/ReadMe.md b/ReadMe.md index 40f0b7a..a2cbfec 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,3 +1,20 @@ -Dans le point env : - - DataBase_url : donc le lien vers une base mysql +# POPCORN +## Variables d'environnement + +``` +DATABASE_URL=donc le lien vers une base mysql (⚠️ pas nécessaire si lancé avec Docker) +API_PORT=port de l'API +CORS_ORIGIN=adresse autorisée pour les CORS +MYSQL_ROOT_PASSWORD=mot de passe du root MYSQL (⚠️ pas nécessaire si lancé sans Docker) +``` + +## Utilisation avec Docker + +Penser à bien définir les variables d'environnement dans un .env à la racine du projet. + +### Build & start + +``` +docker-compose up --build -d +``` diff --git a/app.js b/app.js deleted file mode 100644 index 58e15dc..0000000 --- a/app.js +++ /dev/null @@ -1,25 +0,0 @@ -import express from "express"; -import { PrismaClient } from "@prisma/client"; -import createError from "http-errors" -import cors from 'cors'; -import jeux from './route/jeux.js' -import groupe from './route/groupe.js' -const app = express() - -app.use(express.json()) -app.use(express.urlencoded({extended:true})) - -const port = 3500 - - app.use( - cors({ - origin: ["http://127.0.0.1:5500"], - }) - ); -app.use('/',jeux) -app.use('/',groupe) - -// run the server -app.listen(port, () => { - console.log(`Example app listening on port ${port}`); - }); \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1d7a99c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +services: + db: + image: mysql:oracle + env_file: + - .env + networks: + - back-net + environment: + - "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}" + - "MYSQL_DATABASE=popcorn" + volumes: + - ./mysql-data:/var/lib/mysql + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3306"] + interval: 3s + timeout: 30s + retries: 10 + ports: + - "3306:3306" + backend: + depends_on: + db: + condition: service_healthy + build: . + image: popcorn-backend + env_file: + - .env + environment: + - "DATABASE_URL=mysql://root:${MYSQL_ROOT_PASSWORD}@db:3306/popcorn" + networks: + - back-net + ports: + - "${API_PORT}:${API_PORT}" + +networks: + back-net: diff --git a/groupeValidator.js b/groupeValidator.js deleted file mode 100644 index 6047f4a..0000000 --- a/groupeValidator.js +++ /dev/null @@ -1,10 +0,0 @@ -import { optional, string, z } from "zod"; - -const groupeValidation = z.object({ - id : z.number().optional(), - name : z.string(), - logo : z.string(), - -}); - -export default groupeValidation; \ No newline at end of file diff --git a/jeuxValidator.js b/jeuxValidator.js deleted file mode 100644 index 411cc53..0000000 --- a/jeuxValidator.js +++ /dev/null @@ -1,13 +0,0 @@ -import { optional, string, z } from "zod"; - -const jeuxValidation = z.object({ - id : z.number().optional(), - Title : z.string(), - Description : z.string(), - Picture: z.string(), - lien : z.string(), - groupe_id : z.number() - -}); - -export default jeuxValidation; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 830fb28..ed83609 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,25 +9,28 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@prisma/client": "^4.9.0", + "@prisma/client": "^4.10.0", "cloudinary": "^1.33.0", "cors": "^2.8.5", + "dotenv": "^16.0.3", "express": "^4.18.2", "http-errors": "^2.0.0", "https-error": "^1.0.2", "multer": "^1.4.5-lts.1", "nodemon": "^2.0.20", - "prisma": "^4.9.0", "zod": "^3.20.2" + }, + "devDependencies": { + "prisma": "^4.10.0" } }, "node_modules/@prisma/client": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.9.0.tgz", - "integrity": "sha512-bz6QARw54sWcbyR1lLnF2QHvRW5R/Jxnbbmwh3u+969vUKXtBkXgSgjDA85nji31ZBlf7+FrHDy5x+5ydGyQDg==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.10.0.tgz", + "integrity": "sha512-sBmYb1S6SMKFIESaLMfKqWSalv3pH73cMCsFt9HslJvYjIIcKQCA6PDL2O4SZGWvc4JBef9cg5Gd7d9x3AtKjw==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5" + "@prisma/engines-version": "4.10.0-84.ca7fcef713137fa11029d519a9780db130cca91d" }, "engines": { "node": ">=14.17" @@ -42,15 +45,16 @@ } }, "node_modules/@prisma/engines": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.9.0.tgz", - "integrity": "sha512-t1pt0Gsp+HcgPJrHFc+d/ZSAaKKWar2G/iakrE07yeKPNavDP3iVKPpfXP22OTCHZUWf7OelwKJxQgKAm5hkgw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.10.0.tgz", + "integrity": "sha512-ZPPo7q+nQZdTlPFedS7mFXPE3oZ2kWtTh3GO4sku0XQ8ikLqEyinuTPJbQCw/8qel2xglIEQicsK6yI4Jgh20A==", + "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5.tgz", - "integrity": "sha512-M16aibbxi/FhW7z1sJCX8u+0DriyQYY5AyeTH7plQm9MLnURoiyn3CZBqAyIoQ+Z1pS77usCIibYJWSgleBMBA==" + "version": "4.10.0-84.ca7fcef713137fa11029d519a9780db130cca91d", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.10.0-84.ca7fcef713137fa11029d519a9780db130cca91d.tgz", + "integrity": "sha512-UVpmVlvSaGfY4ue+hh8CTkIesbuXCFUfrr8zk//+u85WwkKfWMtt6nLB2tNSzR1YO8eAA8+HqNf8LM7mnXIq5w==" }, "node_modules/@tootallnate/once": { "version": "1.1.2", @@ -476,6 +480,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1325,12 +1337,13 @@ } }, "node_modules/prisma": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.9.0.tgz", - "integrity": "sha512-bS96oZ5oDFXYgoF2l7PJ3Mp1wWWfLOo8B/jAfbA2Pn0Wm5Z/owBHzaMQKS3i1CzVBDWWPVnOohmbJmjvkcHS5w==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.10.0.tgz", + "integrity": "sha512-xUHcF3Glc8QGgW8x0rfPITvyyTo04fskUdG7pI4kQbvDX/rhzDP4046x/FvazYqYHXMLR5/KTIi2p2Gth5vKOQ==", + "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "4.9.0" + "@prisma/engines": "4.10.0" }, "bin": { "prisma": "build/index.js", @@ -1865,22 +1878,23 @@ }, "dependencies": { "@prisma/client": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.9.0.tgz", - "integrity": "sha512-bz6QARw54sWcbyR1lLnF2QHvRW5R/Jxnbbmwh3u+969vUKXtBkXgSgjDA85nji31ZBlf7+FrHDy5x+5ydGyQDg==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.10.0.tgz", + "integrity": "sha512-sBmYb1S6SMKFIESaLMfKqWSalv3pH73cMCsFt9HslJvYjIIcKQCA6PDL2O4SZGWvc4JBef9cg5Gd7d9x3AtKjw==", "requires": { - "@prisma/engines-version": "4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5" + "@prisma/engines-version": "4.10.0-84.ca7fcef713137fa11029d519a9780db130cca91d" } }, "@prisma/engines": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.9.0.tgz", - "integrity": "sha512-t1pt0Gsp+HcgPJrHFc+d/ZSAaKKWar2G/iakrE07yeKPNavDP3iVKPpfXP22OTCHZUWf7OelwKJxQgKAm5hkgw==" + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.10.0.tgz", + "integrity": "sha512-ZPPo7q+nQZdTlPFedS7mFXPE3oZ2kWtTh3GO4sku0XQ8ikLqEyinuTPJbQCw/8qel2xglIEQicsK6yI4Jgh20A==", + "devOptional": true }, "@prisma/engines-version": { - "version": "4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.9.0-42.ceb5c99003b99c9ee2c1d2e618e359c14aef2ea5.tgz", - "integrity": "sha512-M16aibbxi/FhW7z1sJCX8u+0DriyQYY5AyeTH7plQm9MLnURoiyn3CZBqAyIoQ+Z1pS77usCIibYJWSgleBMBA==" + "version": "4.10.0-84.ca7fcef713137fa11029d519a9780db130cca91d", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.10.0-84.ca7fcef713137fa11029d519a9780db130cca91d.tgz", + "integrity": "sha512-UVpmVlvSaGfY4ue+hh8CTkIesbuXCFUfrr8zk//+u85WwkKfWMtt6nLB2tNSzR1YO8eAA8+HqNf8LM7mnXIq5w==" }, "@tootallnate/once": { "version": "1.1.2", @@ -2208,6 +2222,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -2840,11 +2859,12 @@ "optional": true }, "prisma": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.9.0.tgz", - "integrity": "sha512-bS96oZ5oDFXYgoF2l7PJ3Mp1wWWfLOo8B/jAfbA2Pn0Wm5Z/owBHzaMQKS3i1CzVBDWWPVnOohmbJmjvkcHS5w==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-4.10.0.tgz", + "integrity": "sha512-xUHcF3Glc8QGgW8x0rfPITvyyTo04fskUdG7pI4kQbvDX/rhzDP4046x/FvazYqYHXMLR5/KTIi2p2Gth5vKOQ==", + "devOptional": true, "requires": { - "@prisma/engines": "4.9.0" + "@prisma/engines": "4.10.0" } }, "process-nextick-args": { diff --git a/package.json b/package.json index fd35a1a..0543599 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "dependencies": { - "@prisma/client": "^4.9.0", + "@prisma/client": "^4.10.0", "cloudinary": "^1.33.0", "cors": "^2.8.5", + "dotenv": "^16.0.3", "express": "^4.18.2", "http-errors": "^2.0.0", "https-error": "^1.0.2", "multer": "^1.4.5-lts.1", "nodemon": "^2.0.20", - "prisma": "^4.9.0", "zod": "^3.20.2" }, "name": "popcorn", @@ -17,8 +17,8 @@ "main": "index.js", "type": "module", "scripts": { - "start": "nodemon app.js", - "dev": "nodemon app.js", + "start": "npx prisma migrate deploy && node src/app.js", + "dev": "nodemon src/app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { @@ -30,5 +30,8 @@ "bugs": { "url": "https://github.com/scotty974/PopCorn/issues" }, - "homepage": "https://github.com/scotty974/PopCorn#readme" + "homepage": "https://github.com/scotty974/PopCorn#readme", + "devDependencies": { + "prisma": "^4.10.0" + } } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 9fb9825..b2ab136 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -10,19 +10,19 @@ datasource db { url = env("DATABASE_URL") } -model Groupe{ - id Int @id @default(autoincrement()) +model Groupe { + id Int @id @default(autoincrement()) name String logo String @db.VarChar(255) - jeux Jeux [] + jeux Jeux[] } -model Jeux{ - id Int @id @default(autoincrement()) - Title String - Description String - Picture String @db.VarChar(255) - lien String - groupe_id Int - groupe Groupe @relation(fields: [groupe_id], references: [id]) +model Jeux { + id Int @id @default(autoincrement()) + Title String + Description String + Picture String @db.VarChar(255) + lien String + groupe_id Int + groupe Groupe @relation(fields: [groupe_id], references: [id]) } diff --git a/route/jeux.js b/route/jeux.js deleted file mode 100644 index a7e03e4..0000000 --- a/route/jeux.js +++ /dev/null @@ -1,81 +0,0 @@ -import express from "express"; -import { PrismaClient } from "@prisma/client"; -import createError from "http-errors" -import jeuxValidation from "../jeuxValidator.js"; - -const router = express.Router() -const prisma = new PrismaClient(); - - -router.patch('/upload',async(req,res,next)=>{ - let modifyData; - try{ - modifyData = jeuxValidation.parse(req.body) - }catch(error){ - return res.status(400).json({ errors: error.issues }) - } - const id = await prisma.jeux.findFirst({ - where:{ - id : modifyData.id - } - }) - // on va verifier si le mail de la personne est bon , sinon il peut pas modifier son mot de passe - if(!id) return next(createError(200, "Vérifiez l'existence de ce jeux ")); - - await prisma.jeux.update({ - where:{ - id : modifyData.id - }, - data:{ - - Title : modifyData.Title, - Description : modifyData.Description, - Picture : modifyData.Picture, - lien : modifyData.lien, - groupe:{ - connect:{ - id : modifyData.groupe_id - } - } - } - }) - .then(()=>{ - res.json({"message" : "Modification de la page"}) - }) -}) - -router.post('/jeux',async (req,res,next)=>{ - let jeuxData; - jeuxData = jeuxValidation.parse(req.body) - let jeux = await prisma.jeux.create({ - data:{ - Title : jeuxData.Title, - Description : jeuxData.Description, - Picture : jeuxData.Picture, - lien : jeuxData.lien, - groupe:{ - connect:{ - id : jeuxData.groupe_id - - } - } - } - - }) - res.json(jeux) - console.log(jeux) - -}) - -router.get('/jeux', async(req,res)=>{ - let jeux = await prisma.jeux.findMany({ - include:{ - groupe:true - } - }) - res.json(jeux) -}) - - - -export default router; \ No newline at end of file diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..c78d564 --- /dev/null +++ b/src/app.js @@ -0,0 +1,27 @@ +import express from "express"; +import cors from 'cors'; +import jeux from './route/jeux.js' +import groupe from './route/groupe.js' +import * as dotenv from 'dotenv' + +dotenv.config() + +const app = express() + +app.use(express.json()) +app.use(express.urlencoded({ extended: true })) + +const port = process.env.API_PORT + +app.use( + cors({ + origin: [process.env.CORS_ORIGIN ?? '*'], + }) +); +app.use('/', jeux) +app.use('/', groupe) + +// run the server +app.listen(port, () => { + console.log(`Example app listening on port ${port}`); +}); \ No newline at end of file diff --git a/src/groupeValidator.js b/src/groupeValidator.js new file mode 100644 index 0000000..da82343 --- /dev/null +++ b/src/groupeValidator.js @@ -0,0 +1,10 @@ +import { z } from "zod"; + +const groupeValidation = z.object({ + id: z.number().optional(), + name: z.string(), + logo: z.string(), + +}); + +export default groupeValidation; \ No newline at end of file diff --git a/img/fabbbb_A_boys_dreams_for_a_girl_All_softness_and_poetry_He_imag_33dc9ed2-6182-411c-b8d0-5210b54ebc45.png b/src/img/fabbbb_A_boys_dreams_for_a_girl_All_softness_and_poetry_He_imag_33dc9ed2-6182-411c-b8d0-5210b54ebc45.png similarity index 100% rename from img/fabbbb_A_boys_dreams_for_a_girl_All_softness_and_poetry_He_imag_33dc9ed2-6182-411c-b8d0-5210b54ebc45.png rename to src/img/fabbbb_A_boys_dreams_for_a_girl_All_softness_and_poetry_He_imag_33dc9ed2-6182-411c-b8d0-5210b54ebc45.png diff --git a/src/jeuxValidator.js b/src/jeuxValidator.js new file mode 100644 index 0000000..6f301dd --- /dev/null +++ b/src/jeuxValidator.js @@ -0,0 +1,13 @@ +import { z } from "zod"; + +const jeuxValidation = z.object({ + id: z.number().optional(), + Title: z.string(), + Description: z.string(), + Picture: z.string(), + lien: z.string(), + groupe_id: z.number() + +}); + +export default jeuxValidation; \ No newline at end of file diff --git a/route/groupe.js b/src/route/groupe.js similarity index 54% rename from route/groupe.js rename to src/route/groupe.js index 3a2d46d..e4c4d0c 100644 --- a/route/groupe.js +++ b/src/route/groupe.js @@ -6,46 +6,46 @@ import groupeValidation from "../groupeValidator.js"; const router = express.Router() const prisma = new PrismaClient(); -router.patch('/uploadGroupe',async(req,res,next)=>{ +router.patch('/uploadGroupe', async (req, res, next) => { let modifyData; - try{ + try { modifyData = groupeValidation.parse(req.body) - }catch(error){ + } catch (error) { return res.status(400).json({ errors: error.issues }) } const id = await prisma.groupe.findFirst({ - where:{ - id : modifyData.id + where: { + id: modifyData.id } }) - // on va verifier si le mail de la personne est bon , sinon il peut pas modifier son mot de passe - if(!id) return next(createError(200, "Vérifiez l'existence de ce groupe ")); - + // on va verifier si le mail de la personne est bon , sinon il peut pas modifier son mot de passe + if (!id) return next(createError(200, "Vérifiez l'existence de ce groupe ")); + await prisma.groupe.update({ - where:{ - id : modifyData.id + where: { + id: modifyData.id }, - data:{ - - name : modifyData.name, - logo : modifyData.logo - + data: { + + name: modifyData.name, + logo: modifyData.logo + } }) - .then(()=>{ - res.json({"message" : "Modification de la page"}) - }) + .then(() => { + res.json({ "message": "Modification de la page" }) + }) }) -router.post('/groupe', async(req,res)=>{ +router.post('/groupe', async (req, res) => { let groupData; groupData = groupeValidation.parse(req.body) let group = await prisma.groupe.create({ - data:{ - name : groupData.name, - logo : groupData.logo, - - } + data: { + name: groupData.name, + logo: groupData.logo, + + } }) res.json(group) }) diff --git a/src/route/jeux.js b/src/route/jeux.js new file mode 100644 index 0000000..337c2a2 --- /dev/null +++ b/src/route/jeux.js @@ -0,0 +1,81 @@ +import express from "express"; +import { PrismaClient } from "@prisma/client"; +import createError from "http-errors" +import jeuxValidation from "../jeuxValidator.js"; + +const router = express.Router() +const prisma = new PrismaClient(); + + +router.patch('/upload', async (req, res, next) => { + let modifyData; + try { + modifyData = jeuxValidation.parse(req.body) + } catch (error) { + return res.status(400).json({ errors: error.issues }) + } + const id = await prisma.jeux.findFirst({ + where: { + id: modifyData.id + } + }) + // on va verifier si le mail de la personne est bon , sinon il peut pas modifier son mot de passe + if (!id) return next(createError(200, "Vérifiez l'existence de ce jeux ")); + + await prisma.jeux.update({ + where: { + id: modifyData.id + }, + data: { + + Title: modifyData.Title, + Description: modifyData.Description, + Picture: modifyData.Picture, + lien: modifyData.lien, + groupe: { + connect: { + id: modifyData.groupe_id + } + } + } + }) + .then(() => { + res.json({ "message": "Modification de la page" }) + }) +}) + +router.post('/jeux', async (req, res, next) => { + let jeuxData; + jeuxData = jeuxValidation.parse(req.body) + let jeux = await prisma.jeux.create({ + data: { + Title: jeuxData.Title, + Description: jeuxData.Description, + Picture: jeuxData.Picture, + lien: jeuxData.lien, + groupe: { + connect: { + id: jeuxData.groupe_id + + } + } + } + + }) + res.json(jeux) + console.log(jeux) + +}) + +router.get('/jeux', async (req, res) => { + let jeux = await prisma.jeux.findMany({ + include: { + groupe: true + } + }) + res.json(jeux) +}) + + + +export default router; \ No newline at end of file