From 79df68b2cca447f34aba29a96585f8aed4c37c84 Mon Sep 17 00:00:00 2001 From: Stefan-5422 <32109571+Stefan-5422@users.noreply.github.com> Date: Tue, 7 Jun 2022 14:17:52 +0000 Subject: [PATCH] Address #74 & make email code more solid --- src/Controllers/user_auth.controller.ts | 67 +++++++++++++++++++------ 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/src/Controllers/user_auth.controller.ts b/src/Controllers/user_auth.controller.ts index 8d65606..a029ff7 100644 --- a/src/Controllers/user_auth.controller.ts +++ b/src/Controllers/user_auth.controller.ts @@ -70,7 +70,7 @@ export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Respon select: { pid: true, name: true, - discipline: { select: { pid: true } }, + discipline: { select: { pid: true, name: true } }, }, }); @@ -80,11 +80,8 @@ export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Respon (await mailClient).set(usid, team.pid); - const eventname = await prisma.discipline.findUnique({ where: { pid: body.disciplineId }, select: { event: { select: { name: true, } } } }).event.name; - verificationMail(req.body.leaderEmail, eventname, usid); - + verificationMail(req.body.leaderEmail, team.discipline.name, usid); return res.status(201).json({ type: "success", payload: { team } }); - } catch (e) { if (e instanceof PrismaClientKnownRequestError && e.code === "P2025") { return res.status(404).json({ @@ -97,22 +94,26 @@ export const register = async (req: Request<{}, {}, CreateTeamBody>, res: Respon throw e; } - - - }; export const requestToken = async (req: Request, res: Response) => { - const { teamId } = req.body || {}; + const data = z.object({ teamId: z.string().min(1) }).safeParse(req); - if (!(typeof teamId === "string")) { - return res.status(400).json(generateInvalidBodyError({ teamId: DataType.STRING })); + if (data.success == false) { + return res.status(400).json(generateInvalidBodyError({ teamId: DataType.STRING }, data.error)); } + const { teamId } = data.data; + const team = await prisma.team.findUnique({ where: { pid: teamId, }, + select: { + discipline: { select: { name: true } }, + pid: true, + leaderEmail: true, + }, }); if (!team) { @@ -123,9 +124,46 @@ export const requestToken = async (req: Request, res: Response) => { (await mailClient).set(usid, team.pid); - // TODO: fix "eventname" - // let teamName = await prisma.team.findUnique({ where: { pid: teamId }, select: { discipline: { select: { event: { select: { name: true } } } } } }); - verificationMail(team.leaderEmail, "eventname", usid); + verificationMail(team.leaderEmail, team.discipline.name, usid); + + res.status(200).json({ type: "sucess", payload: { message: "Email sent!" } }); +}; + +export const requestTokenEmail = async (req: Request, res: Response) => { + const data = z.object({ email: z.string().min(1) }).safeParse(req); + + if (data.success == false) { + return res.status(400).json(generateInvalidBodyError({ email: DataType.STRING }, data.error)); + } + + const { email } = data.data; + + const teams = await prisma.team.findMany({ + where: { + leaderEmail: email, + }, + select: { + discipline: { select: { name: true } }, + pid: true, + leaderEmail: true, + }, + }); + + if (!teams) { + return res.status(404).json(generateError("Team does not exist!")); + } + + const team = teams[0]; //REVIEW: maybe a email should be only able to be responsible for one team + + if (!team) { + return res.status(404).json(generateError("Team does not exist!")); + } + + const usid = nanoid(); + + (await mailClient).set(usid, team.pid); + + verificationMail(team.leaderEmail, team.discipline.name, usid); res.status(200).json({ type: "sucess", payload: { message: "Email sent!" } }); }; @@ -180,5 +218,4 @@ export const verifyEmail = async (req: Request, res: Response) => { throw e; } - };