diff --git a/snippets-manager-front b/snippets-manager-front index 57d431a..01881cc 160000 --- a/snippets-manager-front +++ b/snippets-manager-front @@ -1 +1 @@ -Subproject commit 57d431a0ba0dbbf96df0d658eff5538ae3667043 +Subproject commit 01881cc4464cfda7ad47e4aa19b746e015d21d0f diff --git a/src/routers/category.ts b/src/routers/category.ts index 453a8d0..00e8992 100644 --- a/src/routers/category.ts +++ b/src/routers/category.ts @@ -25,6 +25,12 @@ const paramsIdParser = z }) .required() +const categoryDeleteManyParser = z + .object({ + ids: z.array(z.coerce.number()), + }) + .required() + async function findCategories(userId: number, pagination: Pagination): Promise { const query: any = { where: { user_id: userId }, @@ -137,10 +143,31 @@ const categoryDelete: RequestHandler = async (req, res) => { } } +const categoryDeleteMany: RequestHandler = async (req, res) => { + let deleted: Prisma.BatchPayload + + try { + const userId = parseJwtUserId(req.cookies.jwt) + const ids = categoryDeleteManyParser.parse(req.body).ids + deleted = await prisma.category.deleteMany({ + where: { + id: { in: ids }, + user_id: userId, + }, + }) + } catch (error: any) { + res.status(400).json({ message: error.issues ?? error }) + return + } + + res.json({ message: `${deleted.count} category / categories successfully deleted.` }) +} + categoryRouter.get("/", userIdMiddleware, categoryGet) categoryRouter.get("/:id", userIdMiddleware, categoryGetUnique) categoryRouter.post("/", userIdMiddleware, categoryPost) categoryRouter.put("/:id", userIdMiddleware, categoryUpdate) categoryRouter.delete("/:id", userIdMiddleware, categoryDelete) +categoryRouter.delete("/", userIdMiddleware, categoryDeleteMany) export default categoryRouter