From 10c7c07b97704e628aa413ba2617470b1a07ccf3 Mon Sep 17 00:00:00 2001 From: Florian Sylvain Date: Thu, 2 Feb 2023 10:11:56 +0100 Subject: [PATCH] Added PUT route for Snippet --- src/__tests__/app.test.ts | 20 ++++++++++++++++++-- src/routers/snippet.ts | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/__tests__/app.test.ts b/src/__tests__/app.test.ts index 27b34cf..b400ddd 100644 --- a/src/__tests__/app.test.ts +++ b/src/__tests__/app.test.ts @@ -15,8 +15,6 @@ const testUserCredentials = { let category_id: number let snippet_id: number -// Mettre a jour les routes Category en stockant les IDs sur GET pour reutiliser sur DELETE - beforeAll(async () => { await prisma.user.create({ data: { @@ -239,6 +237,24 @@ describe('GET /v1/snippet', () => { }) }) +describe('PUT /v1/snippet/:id', () => { + it('returns status code 200 and success message', async () => { + const res = await request(app) + .put(`/v1/snippet/${snippet_id}`) + .set('Content-Type', 'application/json') + .set('Cookie', jwtCookie as string) + .send(JSON.stringify({ + code: '

en fait non à vuejs

', + // language: 'html' + })) + + console.debug(res.body) + + expect(res.status).toEqual(200) + expect(res.body).toHaveProperty('message') + }) +}) + describe('DELETE /v1/snippet', () => { it('returns status code 200 and success message', async () => { const res = await request(app) diff --git a/src/routers/snippet.ts b/src/routers/snippet.ts index 810f85a..77e49c4 100644 --- a/src/routers/snippet.ts +++ b/src/routers/snippet.ts @@ -16,6 +16,15 @@ const snippetDeleteParser = z.object({ id: z.number(), }).required() +const snippetUpdateParser = z.object({ + code: z.string().optional(), + title: z.string().max(50).optional(), + language: z.string().max(32).optional() +}) + +const paramsIdParser = z.object({ + id: z.coerce.number(), +}).required() // TODO Ajouter paramètres sur la requête pour rechercher des snippets // TODO Ajouter pagination @@ -58,6 +67,26 @@ const snippetPost: RequestHandler = async (req, res) => { res.json({ message: 'Snippet successfully added.' }) } +const snippetUpdate: RequestHandler = async (req, res) => { + let updated: Prisma.BatchPayload + + try { + const snippetToUpdate = snippetUpdateParser.parse(req.body) + updated = await prisma.snippet.updateMany({ + where: { + id: paramsIdParser.parse(req.params).id, + user_id: req.body.userId + }, + data: snippetToUpdate + }) + } catch (error: any) { + res.status(400).json({ message: (error.issues ?? error) }) + return; + } + + res.json({ message: `${updated.count} snippet / categories successfully updated.` }) +} + const snippetDelete: RequestHandler = async (req, res) => { let deleted: Prisma.BatchPayload @@ -77,10 +106,9 @@ const snippetDelete: RequestHandler = async (req, res) => { res.json({ message: `${deleted.count} snippet(s) successfully deleted.` }) } -// TODO update snippet - snippetRouter.get('/', userIdMiddleware, snippetGet) snippetRouter.post('/', userIdMiddleware, snippetPost) +snippetRouter.put('/:id', userIdMiddleware, snippetUpdate) snippetRouter.delete('/', userIdMiddleware, snippetDelete) export default snippetRouter