ENCOA-263

This commit is contained in:
Tiago Ribeiro
2024-12-11 22:00:43 +00:00
parent ce35ba71f4
commit 1a7d35317b
10 changed files with 234 additions and 194 deletions

View File

@@ -1,13 +1,15 @@
import {NextApiRequest, NextApiResponse} from "next";
import {createUserWithEmailAndPassword, getAuth} from "firebase/auth";
import {app} from "@/firebase";
import {sessionOptions} from "@/lib/session";
import {withIronSessionApiRoute} from "iron-session/next";
import {Code, CorporateInformation, DemographicInformation, Group, Type} from "@/interfaces/user";
import {addUserToGroupOnCreation} from "@/utils/registration";
import { NextApiRequest, NextApiResponse } from "next";
import { createUserWithEmailAndPassword, getAuth } from "firebase/auth";
import { app } from "@/firebase";
import { sessionOptions } from "@/lib/session";
import { withIronSessionApiRoute } from "iron-session/next";
import { Code, CorporateInformation, DemographicInformation, Group, Type } from "@/interfaces/user";
import { addUserToGroupOnCreation } from "@/utils/registration";
import moment from "moment";
import {v4} from "uuid";
import { v4 } from "uuid";
import client from "@/lib/mongodb";
import { addUserToEntity, getEntityWithRoles } from "@/utils/entities.be";
import { findBy } from "@/utils";
const auth = getAuth(app);
const db = client.db(process.env.MONGODB_DB);
@@ -29,7 +31,7 @@ const DEFAULT_LEVELS = {
};
async function register(req: NextApiRequest, res: NextApiResponse) {
const {type} = req.body as {
const { type } = req.body as {
type: "individual" | "corporate";
};
@@ -38,19 +40,18 @@ async function register(req: NextApiRequest, res: NextApiResponse) {
}
async function registerIndividual(req: NextApiRequest, res: NextApiResponse) {
const {email, passport_id, password, code} = req.body as {
const { email, passport_id, password, code } = req.body as {
email: string;
passport_id?: string;
password: string;
code?: string;
};
const codeDoc = await db.collection("codes").findOne<Code>({code});
const codeDoc = await db.collection("codes").findOne<Code>({ code });
if (code && code.length > 0 && !codeDoc)
return res.status(400).json({ error: "Invalid Code!" });
if (code && code.length > 0 && !!codeDoc) {
res.status(400).json({error: "Invalid Code!"});
return;
}
createUserWithEmailAndPassword(auth, email.toLowerCase(), password)
.then(async (userCredentials) => {
@@ -69,7 +70,7 @@ async function registerIndividual(req: NextApiRequest, res: NextApiResponse) {
focus: "academic",
type: email.endsWith("@ecrop.dev") ? "developer" : codeDoc ? codeDoc.type : "student",
subscriptionExpirationDate: codeDoc ? codeDoc.expiryDate : moment().subtract(1, "days").toISOString(),
...(passport_id ? {demographicInformation: {passport_id}} : {}),
...(passport_id ? { demographicInformation: { passport_id } } : {}),
registrationDate: new Date().toISOString(),
status: code ? "active" : "paymentDue",
// apparently there's an issue with the verification email system
@@ -80,23 +81,29 @@ async function registerIndividual(req: NextApiRequest, res: NextApiResponse) {
await db.collection("users").insertOne(user);
if (!!codeDoc) {
await db.collection("codes").updateOne({code: codeDoc.code}, {$set: {userId}});
if (codeDoc.creator) await addUserToGroupOnCreation(userId, codeDoc.type, codeDoc.creator);
await db.collection("codes").updateOne({ code: codeDoc.code }, { $set: { userId } });
if (codeDoc.entity) {
const inviteEntity = await getEntityWithRoles(codeDoc.entity)
if (inviteEntity) {
const defaultRole = findBy(inviteEntity.roles, 'isDefault', true)!
await addUserToEntity(userId, codeDoc.entity, defaultRole.id)
}
}
}
req.session.user = user;
await req.session.save();
res.status(200).json({user});
res.status(200).json({ user });
})
.catch((error) => {
console.log(error);
res.status(401).json({error});
res.status(401).json({ error });
});
}
async function registerCorporate(req: NextApiRequest, res: NextApiResponse) {
const {email, password} = req.body as {
const { email, password } = req.body as {
email: string;
password: string;
corporateInformation: CorporateInformation;
@@ -155,10 +162,10 @@ async function registerCorporate(req: NextApiRequest, res: NextApiResponse) {
req.session.user = user;
await req.session.save();
res.status(200).json({user});
res.status(200).json({ user });
})
.catch((error) => {
console.log(error);
res.status(401).json({error});
res.status(401).json({ error });
});
}