mirror of
https://github.com/detleph/server.git
synced 2026-09-07 23:44:40 +02:00
Fix make code more stable & tackle #66
This commit is contained in:
@@ -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" } });
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user