Add team routes

This commit is contained in:
Stefan-5422
2022-05-30 20:58:16 +02:00
parent aa6f0825ac
commit 6f730d1214
3 changed files with 106 additions and 3 deletions
+98
View File
@@ -0,0 +1,98 @@
import { Request, Response } from "express";
import prisma from "../lib/prisma";
import { createInsufficientPermissionsError, DataType, generateInvalidBodyError } from "./common";
import { requireLeaderOfTeam } from "../Middleware/auth/teamleaderAuth";
import { z } from "zod";
const TeamBody = z.object({
teamName: z.string().min(1),
leaderEmail: z.string().email(),
disciplineId: z.string().uuid(),
partFirstName: z.string().min(1),
partLastName: z.string().min(1),
partGroupId: z.string().uuid(),
});
interface CreateTeamBody {
teamName: string;
leaderEmail: string;
disciplineId: string;
partFirstName: string;
partLastName: string;
partGroupId: string;
}
export const getTeams = async (req: Request, res: Response) => {
const teams = prisma.team.findMany({ select: { pid: true, name: true, disciplineId: true } });
res.status(200).json(teams);
};
export const getTeam = async (req: Request, res: Response) => {
const { pid } = req.params;
const team = prisma.team.findUnique({
where: { pid },
select: {
disciplineId: true,
name: true,
pid: true,
},
});
res.status(200).json(team);
};
export const updateTeam = async (req: Request, res: Response) => {
const result = TeamBody.merge(z.object({ pid: z.string().min(1) }))
.omit({ partGroupId: true, partFirstName: true, partLastName: true })
.safeParse(req.body);
if (result.success === false) {
return res.status(400).json(
generateInvalidBodyError(
{
teamName: DataType.STRING,
leaderEmail: DataType.STRING,
disciplineId: DataType.UUID,
},
result.error
)
);
}
const body = result.data;
try {
requireLeaderOfTeam(req.teamleader, body.pid);
} catch {
return res.status(401).json(createInsufficientPermissionsError("STANDARD"));
}
const team = prisma.team.update({
where: {
pid: body.pid,
},
data: {
name: body.teamName,
discipline: { connect: { pid: body.disciplineId } },
leaderEmail: body.leaderEmail,
},
});
res.status(204).json(team);
};
export const deleteTeam = async (req: Request, res: Response) => {
const { pid } = req.params;
try {
requireLeaderOfTeam(req.teamleader, pid);
} catch {
return res.status(401).json(createInsufficientPermissionsError("STANDARD"));
}
prisma.team.delete({ where: { pid } });
res.status(204).json("Welp its gone");
};
+5 -3
View File
@@ -1,12 +1,14 @@
import express from "express";
import { requireAuthentication } from "../Middleware/auth/auth";
import { requireAuthentication, requireConfiguredAuthentication } from "../Middleware/auth/auth";
import { requireTeamleaderAuthentication } from "../Middleware/auth/teamleaderAuth";
import { register } from "../Controllers/user_auth.controller";
import { deleteTeam, getTeam, getTeams, updateTeam } from "../Controllers/team.controller";
const router = express.Router();
router.post("/", requireAuthentication, requireTeamleaderAuthentication, register);
router.get("/", requireConfiguredAuthentication({ type: "admin", optional: false }), getTeams);
router.get("/:id", getTeam);
router.put("/", requireTeamleaderAuthentication, updateTeam);
router.delete<"/:pid/", { pid: string }>("/:pid/", requireAuthentication, requireTeamleaderAuthentication, deleteTeam);
export default router;
+3
View File
@@ -14,6 +14,7 @@ import logger from "./Middleware/error/logger";
import debugLogger from "./Middleware/debug/logger";
import mediaRouter from "./Routes/media.routes";
import userRouter from "./Routes/user_auth.routes";
import TeamRouter from "./Routes/team.routes";
import { notFoundHandler, rootHandler } from "./Middleware/error/defaultRoutes";
// Set up async error handling
@@ -86,6 +87,8 @@ async function main() {
app.use("/api/users", userRouter);
app.use("/api/teams", TeamRouter);
app.get("/", rootHandler);
app.get("/api", rootHandler);