Fix make code more stable & tackle #66

This commit is contained in:
Stefan-5422
2022-06-02 22:14:41 +02:00
parent fc894f7643
commit 80b09ebf5a
2 changed files with 22 additions and 36 deletions
+7 -32
View File
@@ -3,29 +3,12 @@ import prisma from "../lib/prisma";
import { createInsufficientPermissionsError, DataType, generateInvalidBodyError } from "./common"; import { createInsufficientPermissionsError, DataType, generateInvalidBodyError } from "./common";
import { requireLeaderOfTeam } from "../Middleware/auth/teamleaderAuth"; import { requireLeaderOfTeam } from "../Middleware/auth/teamleaderAuth";
import { z } from "zod"; import { z } from "zod";
import { TeamBody } from "./user_auth.controller";
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) => { export const getTeams = async (req: Request, res: Response) => {
const teams = prisma.team.findMany({ select: { pid: true, name: true, disciplineId: true } }); const teams = prisma.team.findMany({ select: { pid: true, name: true, disciplineId: true } });
res.status(200).json(teams); res.status(200).json({ type: "success", payload: { teams } });
}; };
export const getTeam = async (req: Request, res: Response) => { export const getTeam = async (req: Request, res: Response) => {
@@ -40,7 +23,7 @@ export const getTeam = async (req: Request, res: Response) => {
}, },
}); });
res.status(200).json(team); res.status(200).json({ type: "success", payload: { team } });
}; };
export const updateTeam = async (req: Request, res: Response) => { export const updateTeam = async (req: Request, res: Response) => {
@@ -63,11 +46,7 @@ export const updateTeam = async (req: Request, res: Response) => {
const body = result.data; const body = result.data;
try { requireLeaderOfTeam(req.teamleader, body.pid);
requireLeaderOfTeam(req.teamleader, body.pid);
} catch {
return res.status(401).json(createInsufficientPermissionsError("STANDARD"));
}
const team = prisma.team.update({ const team = prisma.team.update({
where: { where: {
@@ -80,19 +59,15 @@ export const updateTeam = async (req: Request, res: Response) => {
}, },
}); });
res.status(204).json(team); res.status(204).json({ type: "success", payload: { team } });
}; };
export const deleteTeam = async (req: Request, res: Response) => { export const deleteTeam = async (req: Request, res: Response) => {
const { pid } = req.params; const { pid } = req.params;
try { requireLeaderOfTeam(req.teamleader, pid);
requireLeaderOfTeam(req.teamleader, pid);
} catch {
return res.status(401).json(createInsufficientPermissionsError("STANDARD"));
}
prisma.team.delete({ where: { pid } }); prisma.team.delete({ where: { pid } });
res.status(204).json("Welp its gone"); res.status(204).json({ type: "success", payload: { message: "Sucesfully deleted team" } });
}; };
+15 -4
View File
@@ -3,12 +3,12 @@ import prisma from "../lib/prisma";
import { mailClient } from "../lib/redis"; import { mailClient } from "../lib/redis";
import { nanoid } from "nanoid"; import { nanoid } from "nanoid";
import { verificationMail } from "../lib/mail"; import { verificationMail } from "../lib/mail";
import { createInsufficientPermissionsError, DataType, generateInvalidBodyError } from "./common"; import { createInsufficientPermissionsError, DataType, generateError, generateInvalidBodyError } from "./common";
import { generateTeamleaderJWT, requireLeaderOfTeam } from "../Middleware/auth/teamleaderAuth"; import { generateTeamleaderJWT, requireLeaderOfTeam } from "../Middleware/auth/teamleaderAuth";
import { createRolesForTeam } from "./role.controller"; import { createRolesForTeam } from "./role.controller";
import { any, z } from "zod"; import { any, z } from "zod";
const TeamBody = z.object({ export const TeamBody = z.object({
teamName: z.string().min(1), teamName: z.string().min(1),
leaderEmail: z.string().email(), leaderEmail: z.string().email(),
disciplineId: z.string().uuid(), disciplineId: z.string().uuid(),
@@ -26,7 +26,6 @@ interface CreateTeamBody {
partGroupId: string; partGroupId: string;
} }
// TODO: Some kind of auth (Teamleader probably)
export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Response) => { export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Response) => {
const result = TeamBody.safeParse(req.body); const result = TeamBody.safeParse(req.body);
@@ -48,6 +47,18 @@ export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Respon
const body = result.data; const body = result.data;
const group = prisma.group.findUnique({ where: { pid: body.partGroupId } });
if (typeof group == null) {
return res.status(404).json(generateError("Specified group was not found!"));
}
const discipline = prisma.discipline.findUnique({ where: { pid: body.disciplineId } });
if (typeof discipline == null) {
return res.status(404).json(generateError("Specified discipline was not found!"));
}
const team = await prisma.team.create({ const team = await prisma.team.create({
data: { data: {
leaderEmail: body.leaderEmail, leaderEmail: body.leaderEmail,
@@ -96,7 +107,7 @@ export const requestToken = async (req: Request, res: Response) => {
}); });
if (!team) { if (!team) {
return res.status(404).json(); return res.status(404).json(generateError("Team does not exist!"));
} }
const usid = nanoid(); const usid = nanoid();