From 80b09ebf5af72902455a17bb8bc47dddad8646a9 Mon Sep 17 00:00:00 2001 From: Stefan-5422 <32109571+Stefan-5422@users.noreply.github.com> Date: Thu, 2 Jun 2022 22:14:41 +0200 Subject: [PATCH] Fix make code more stable & tackle #66 --- src/Controllers/team.controller.ts | 39 +++++-------------------- src/Controllers/user_auth.controller.ts | 19 +++++++++--- 2 files changed, 22 insertions(+), 36 deletions(-) diff --git a/src/Controllers/team.controller.ts b/src/Controllers/team.controller.ts index 1f2a5dd..481a487 100644 --- a/src/Controllers/team.controller.ts +++ b/src/Controllers/team.controller.ts @@ -3,29 +3,12 @@ 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; -} +import { TeamBody } from "./user_auth.controller"; 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); + res.status(200).json({ type: "success", payload: { teams } }); }; 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) => { @@ -63,11 +46,7 @@ export const updateTeam = async (req: Request, res: Response) => { const body = result.data; - try { - requireLeaderOfTeam(req.teamleader, body.pid); - } catch { - return res.status(401).json(createInsufficientPermissionsError("STANDARD")); - } + requireLeaderOfTeam(req.teamleader, body.pid); const team = prisma.team.update({ 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) => { const { pid } = req.params; - try { - requireLeaderOfTeam(req.teamleader, pid); - } catch { - return res.status(401).json(createInsufficientPermissionsError("STANDARD")); - } + requireLeaderOfTeam(req.teamleader, pid); prisma.team.delete({ where: { pid } }); - res.status(204).json("Welp its gone"); + res.status(204).json({ type: "success", payload: { message: "Sucesfully deleted team" } }); }; diff --git a/src/Controllers/user_auth.controller.ts b/src/Controllers/user_auth.controller.ts index 04cbf46..51dd6a0 100644 --- a/src/Controllers/user_auth.controller.ts +++ b/src/Controllers/user_auth.controller.ts @@ -3,12 +3,12 @@ import prisma from "../lib/prisma"; import { mailClient } from "../lib/redis"; import { nanoid } from "nanoid"; 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 { createRolesForTeam } from "./role.controller"; import { any, z } from "zod"; -const TeamBody = z.object({ +export const TeamBody = z.object({ teamName: z.string().min(1), leaderEmail: z.string().email(), disciplineId: z.string().uuid(), @@ -26,7 +26,6 @@ interface CreateTeamBody { partGroupId: string; } -// TODO: Some kind of auth (Teamleader probably) export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Response) => { const result = TeamBody.safeParse(req.body); @@ -48,6 +47,18 @@ export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Respon 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({ data: { leaderEmail: body.leaderEmail, @@ -96,7 +107,7 @@ export const requestToken = async (req: Request, res: Response) => { }); if (!team) { - return res.status(404).json(); + return res.status(404).json(generateError("Team does not exist!")); } const usid = nanoid();