Add function to create new organisations

+ Extract common functions from the admin controller
This commit is contained in:
Stephan
2022-04-26 16:04:26 +02:00
parent 37437152da
commit ab62e39d8e
3 changed files with 86 additions and 24 deletions
+61 -1
View File
@@ -1,6 +1,7 @@
import { PrismaClientUnknownRequestError } from "@prisma/client/runtime";
import { Request, Response } from "express";
import prisma from "../lib/prisma";
import { DataType, generateInvalidBodyError } from "./common";
import { AUTH_ERROR, createInsufficientPermissionsError, DataType, generateInvalidBodyError } from "./common";
export const getAllOrganisations = async (req: Request, res: Response) => {
const organisations = await prisma.organisation.findMany({
@@ -49,3 +50,62 @@ export const getOrganisation = async (req: Request<GetOrganisationQueryParams>,
},
});
};
interface CreateOrganisationQueryParams {
eventPid: string;
}
interface CreateOrganisationBody {
name?: string;
}
// at: POST /api/events/:eventPid/organisations
// requires: auth(ELEVATED)
export const createOrganisation = async (
req: Request<CreateOrganisationQueryParams, {}, CreateOrganisationBody>,
res: Response
) => {
if (!req.auth?.isAuthenticated) {
return res.status(500).json(AUTH_ERROR);
}
if (req.auth.permission_level !== "ELEVATED") {
return res.status(403).json(createInsufficientPermissionsError());
}
const { name } = req.body || {};
const { eventPid } = req.params;
if (typeof name !== "string") {
return res.status(400).json(generateInvalidBodyError({ name: DataType.STRING, eventId: DataType.UUID }));
}
// Check if event exists
try {
const event = await prisma.event.findUnique({ where: { pid: eventPid } });
if (!event) {
return res.status(404).json({
type: "error",
payload: {
message: `The event with the ID ${eventPid} could not be found`,
},
});
}
} catch (e) {
// REVIEW: Check for valid UUID
if (e instanceof PrismaClientUnknownRequestError) {
return res.status(400).send({
type: "error",
payload: {
message: "Unknown error occured. This could be to malformed IDs",
},
});
}
}
const organisation = await prisma.organisation.create({ data: { name, event: { connect: { pid: eventPid } } } });
res.status(201).json({ type: "success", payload: { organisation } });
};