Made it so that students, connected to a corporate, if they change their e-mail, they get unassigned
This commit is contained in:
@@ -4,14 +4,14 @@ import {app, storage} from "@/firebase";
|
||||
import {getFirestore, collection, getDocs, getDoc, doc, setDoc, query, where} from "firebase/firestore";
|
||||
import {withIronSessionApiRoute} from "iron-session/next";
|
||||
import {sessionOptions} from "@/lib/session";
|
||||
import {User} from "@/interfaces/user";
|
||||
import {Group, User} from "@/interfaces/user";
|
||||
import {getDownloadURL, getStorage, ref, uploadBytes} from "firebase/storage";
|
||||
import {getAuth, signInWithEmailAndPassword, updateEmail, updatePassword} from "firebase/auth";
|
||||
import {errorMessages} from "@/constants/errors";
|
||||
import moment from "moment";
|
||||
import ShortUniqueId from "short-unique-id";
|
||||
import {Payment} from "@/interfaces/paypal";
|
||||
import { toFixedNumber } from "@/utils/number";
|
||||
import {toFixedNumber} from "@/utils/number";
|
||||
const db = getFirestore(app);
|
||||
const auth = getAuth(app);
|
||||
|
||||
@@ -22,10 +22,10 @@ export default withIronSessionApiRoute(handler, sessionOptions);
|
||||
// but if it is not inserted as a string, some UI components will not work (Invalid Date)
|
||||
const addPaymentRecord = async (data: any) => {
|
||||
await setDoc(doc(db, "payments", data.id), data);
|
||||
}
|
||||
};
|
||||
const managePaymentRecords = async (user: User, userId: string | undefined): Promise<boolean> => {
|
||||
try {
|
||||
if(user.type === 'corporate' && userId) {
|
||||
if (user.type === "corporate" && userId) {
|
||||
const shortUID = new ShortUniqueId();
|
||||
const data: Payment = {
|
||||
id: shortUID.randomUUID(8),
|
||||
@@ -38,34 +38,35 @@ const managePaymentRecords = async (user: User, userId: string | undefined): Pro
|
||||
isPaid: false,
|
||||
date: new Date().toISOString(),
|
||||
};
|
||||
|
||||
|
||||
const corporatePayments = await getDocs(query(collection(db, "payments"), where("corporate", "==", userId)));
|
||||
if(corporatePayments.docs.length === 0) {
|
||||
if (corporatePayments.docs.length === 0) {
|
||||
await addPaymentRecord(data);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const hasPaymentPaidAndExpiring = corporatePayments.docs.filter((doc) => {
|
||||
const data = doc.data();
|
||||
return data.isPaid
|
||||
&& moment().isAfter(moment(user.subscriptionExpirationDate).subtract(30, "days"))
|
||||
&& moment().isBefore(moment(user.subscriptionExpirationDate));
|
||||
return (
|
||||
data.isPaid &&
|
||||
moment().isAfter(moment(user.subscriptionExpirationDate).subtract(30, "days")) &&
|
||||
moment().isBefore(moment(user.subscriptionExpirationDate))
|
||||
);
|
||||
});
|
||||
|
||||
if(hasPaymentPaidAndExpiring.length > 0) {
|
||||
if (hasPaymentPaidAndExpiring.length > 0) {
|
||||
await addPaymentRecord(data);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
} catch(e) {
|
||||
} catch (e) {
|
||||
// if this process fails it should not stop the rest of the process
|
||||
console.log(e);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||
if (!req.session.user) {
|
||||
@@ -108,6 +109,18 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||
try {
|
||||
const credential = await signInWithEmailAndPassword(auth, req.session.user.email, updatedUser.password);
|
||||
await updateEmail(credential.user, updatedUser.email);
|
||||
|
||||
const groups = ((await getDocs(collection(db, "groups"))).docs.map((x) => ({...x.data(), id: x.id})) as Group[]).filter((x) =>
|
||||
x.participants.includes(req.session.user!.id),
|
||||
);
|
||||
|
||||
groups.forEach(async (group) => {
|
||||
await setDoc(
|
||||
doc(db, "groups", group.id),
|
||||
{participants: group.participants.filter((x) => x !== req.session.user!.id)},
|
||||
{merge: true},
|
||||
);
|
||||
});
|
||||
} catch {
|
||||
res.status(400).json({error: "E002", message: errorMessages.E002});
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user