Added POST and DELETE routes on Snippets

This commit is contained in:
Florian Sylvain
2023-02-01 23:40:33 +01:00
parent b1f126b674
commit 0e5af06915
3 changed files with 108 additions and 38 deletions
+55 -1
View File
@@ -13,6 +13,7 @@ const testUserCredentials = {
} }
let category_id: number let category_id: number
let snippet_id: number
// Mettre a jour les routes Category en stockant les IDs sur GET pour reutiliser sur DELETE // Mettre a jour les routes Category en stockant les IDs sur GET pour reutiliser sur DELETE
@@ -129,7 +130,7 @@ describe('POST /v1/category', () => {
}) })
describe('GET /v1/category', () => { describe('GET /v1/category', () => {
it('returns status code 200 and the category created', async () => { it('returns status code 200 and the categories', async () => {
const res = await request(app) const res = await request(app)
.get('/v1/category') .get('/v1/category')
.set('Content-Type', 'application/json') .set('Content-Type', 'application/json')
@@ -200,6 +201,59 @@ describe('DELETE /v1/category', () => {
}) })
}) })
describe('POST /v1/snippet', () => {
it('returns status code 200 and the snippets', async () => {
const res = await request(app)
.post('/v1/snippet')
.set('Content-Type', 'application/json')
.set('Cookie', jwtCookie as string)
.send(JSON.stringify({
title: 'Vue3 CompAPI TS script-template-style',
code: `<script setup lang="ts">
</script>
<template>
</template>
<style scoped>
</style>`,
language: 'vue'
}))
expect(res.status).toEqual(200)
expect(res.body).toHaveProperty('message')
})
})
describe('GET /v1/snippet', () => {
it('returns status code 200 and success message', async () => {
const res = await request(app)
.get('/v1/snippet')
.set('Content-Type', 'application/json')
.set('Cookie', jwtCookie as string)
snippet_id = res.body.snippets[0].id
expect(res.status).toEqual(200)
expect(res.body.snippets[0].title).toEqual('Vue3 CompAPI TS script-template-style')
})
})
describe('DELETE /v1/snippet', () => {
it('returns status code 200 and success message', async () => {
const res = await request(app)
.delete('/v1/snippet')
.set('Content-Type', 'application/json')
.set('Cookie', jwtCookie as string)
.send(JSON.stringify({
id: snippet_id
}))
expect(res.status).toEqual(200)
expect(res.body).toHaveProperty('message')
})
})
describe('PUT /v1/user', () => { describe('PUT /v1/user', () => {
it('returns status code 200 and success message', async () => { it('returns status code 200 and success message', async () => {
const res = await request(app) const res = await request(app)
+2
View File
@@ -7,6 +7,7 @@ import cookieParser from 'cookie-parser'
import { getJwtSecret } from './utils/jwt.js' import { getJwtSecret } from './utils/jwt.js'
import sessionRouter from './routers/session.js' import sessionRouter from './routers/session.js'
import categoryRouter from './routers/category.js' import categoryRouter from './routers/category.js'
import snippetRouter from './routers/snippet'
const authMiddleware: RequestHandler = (req, res, next) => { const authMiddleware: RequestHandler = (req, res, next) => {
const token = req.cookies.jwt const token = req.cookies.jwt
@@ -59,6 +60,7 @@ export function initServer(): express.Express {
appRouter.use('/session/', sessionRouter) appRouter.use('/session/', sessionRouter)
appRouter.use('/user/', authMiddleware, userRouter) appRouter.use('/user/', authMiddleware, userRouter)
appRouter.use('/category/', authMiddleware, categoryRouter) appRouter.use('/category/', authMiddleware, categoryRouter)
appRouter.use('/snippet/', authMiddleware, snippetRouter)
app.use('/v1/', appRouter) app.use('/v1/', appRouter)
+51 -37
View File
@@ -6,11 +6,17 @@ import { userIdMiddleware } from "./user.js"
const snippetRouter = express.Router() const snippetRouter = express.Router()
const prisma = new PrismaClient() const prisma = new PrismaClient()
const snippetData = z.object({ const snippetPostParser = z.object({
code: z.string(), code: z.string(),
title: z.string().max(50) title: z.string().max(50),
language: z.string().max(32)
}).required() }).required()
const snippetDeleteParser = z.object({
id: z.number(),
}).required()
// TODO Ajouter paramètres sur la requête pour rechercher des snippets // TODO Ajouter paramètres sur la requête pour rechercher des snippets
// TODO Ajouter pagination // TODO Ajouter pagination
const snippetGet: RequestHandler = async (req, res) => { const snippetGet: RequestHandler = async (req, res) => {
@@ -23,50 +29,58 @@ const snippetGet: RequestHandler = async (req, res) => {
return; return;
} }
res.json({ categories: snippets }) res.json({ snippets })
} }
// const snippetPost: RequestHandler = async (req, res) => { const snippetPost: RequestHandler = async (req, res) => {
// try { try {
// const newSnippet = snippetData.parse(req.body) const newSnippet = snippetPostParser.parse(req.body)
// await prisma.snippet.create({ await prisma.snippet.create({
// data: { data: {
// code: newSnippet.code, title: newSnippet.title,
// title: newSnippet.code, code: newSnippet.code,
// user_id: req.body.userId user: {
// } connect: { id: req.body.userId }
// }) },
// } catch (error: any) { language: {
// res.status(400).json({ message: (error.issues ?? error) }) connectOrCreate: {
// return; where: { name: newSnippet.language },
// } create: { name: newSnippet.language }
}
}
}
})
} catch (error: any) {
res.status(400).json({ message: (error.issues ?? error) })
return;
}
// res.json({ message: 'Snippet successfully added.' }) res.json({ message: 'Snippet successfully added.' })
// } }
// const snippetDelete: RequestHandler = async (req, res) => { const snippetDelete: RequestHandler = async (req, res) => {
// let deleted: Prisma.BatchPayload let deleted: Prisma.BatchPayload
// try { try {
// const snippetToDel = snippetData.parse(req.body) const snippetToDel = snippetDeleteParser.parse(req.body)
// deleted = await prisma.snippet.deleteMany({ deleted = await prisma.category.deleteMany({
// where: { where: {
id: snippetToDel.id,
user_id: req.body.userId
}
})
} catch (error: any) {
res.status(400).json({ message: (error.issues ?? error) })
return;
}
// user_id: req.body.userId res.json({ message: `${deleted.count} snippet(s) successfully deleted.` })
// } }
// })
// } catch (error: any) {
// res.status(400).json({ message: (error.issues ?? error) })
// return;
// }
// res.json({ message: `${deleted.count} category / categories successfully deleted.` })
// }
// TODO update snippet // TODO update snippet
snippetRouter.get('/', userIdMiddleware, snippetGet) snippetRouter.get('/', userIdMiddleware, snippetGet)
// snippetRouter.post('/', userIdMiddleware, snippetPost) snippetRouter.post('/', userIdMiddleware, snippetPost)
// snippetRouter.delete('/', userIdMiddleware, snippetDelete) snippetRouter.delete('/', userIdMiddleware, snippetDelete)
export default snippetRouter export default snippetRouter