From 2034faa4483d59f5c27979f25f19ff11371deba2 Mon Sep 17 00:00:00 2001 From: Stephan <57194608+stephan418@users.noreply.github.com> Date: Sun, 1 May 2022 16:09:10 +0200 Subject: [PATCH] Add endpoint to delete disciplines --- src/Controllers/discipline.controller.ts | 27 +++++++++++++++++++++++- src/Routes/discipline.routes.ts | 8 ++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/Controllers/discipline.controller.ts b/src/Controllers/discipline.controller.ts index fbe4a72..93431ae 100644 --- a/src/Controllers/discipline.controller.ts +++ b/src/Controllers/discipline.controller.ts @@ -1,5 +1,5 @@ import { Prisma, Organisation, Admin, AdminLevel, Team } from "@prisma/client"; -import { PrismaClientKnownRequestError } from "@prisma/client/runtime"; +import { PrismaClientKnownRequestError, PrismaClientUnknownRequestError } from "@prisma/client/runtime"; import { Request, Response } from "express"; import prisma from "../lib/prisma"; import ForwardableError from "../Middleware/error/ForwardableError"; @@ -162,3 +162,28 @@ export const createDiscipline = async (req: Request<{ eventPid: string }, {}, Cr throw e; } }; + +interface DeleteDisciplineQueryParams { + pid: string; +} + +// requires: auth(ELEVATED) +export const deleteDiscipline = async (req: Request, res: Response) => { + if (req.auth?.permission_level !== "ELEVATED") { + res.status(403).json(createInsufficientPermissionsError()); + } + + const { pid } = req.params; + + try { + await prisma.discipline.delete({ where: { pid } }); + + return res.status(204).end(); + } catch (e) { + if (e instanceof PrismaClientKnownRequestError && e.code === "P2025") { + throw new NotFoundError("discipline", pid); + } + + throw e; + } +}; diff --git a/src/Routes/discipline.routes.ts b/src/Routes/discipline.routes.ts index 3ae7ad1..08aec30 100644 --- a/src/Routes/discipline.routes.ts +++ b/src/Routes/discipline.routes.ts @@ -1,12 +1,18 @@ import express from "express"; import eventRouter from "./event.routes"; -import { createDiscipline, getAllDisciplines, getDiscipline } from "../Controllers/discipline.controller"; +import { + createDiscipline, + deleteDiscipline, + getAllDisciplines, + getDiscipline, +} from "../Controllers/discipline.controller"; import { requireAuthentication } from "../Middleware/auth/auth"; const router = express.Router(); router.get("/", getAllDisciplines); // TODO: Optional auth router.get("/:pid", getDiscipline); +router.delete<"/:pid", { pid: string }>("/:pid", requireAuthentication, deleteDiscipline); eventRouter.post("/:eventPid/disciplines", requireAuthentication, createDiscipline);