forms/server/src/modules/genericDataQueries.ts

135 lines
3.4 KiB
TypeScript

/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import type { DatabasePath } from "../interfaces/databasePath.js";
import type {
Appeals,
Commissions,
Contacts,
Events,
Meetings,
Mentorships,
PrismaClient,
Staff,
} from "@prisma/client";
/**
* Generic wrapper to list all unreviewed submissions of a given type.
* @param database - The Prisma client.
* @param route - The type of data to list.
* @returns An array of unreviewed submissions.
*/
const listUnreviewedSubmissions = async(
database: PrismaClient,
route: DatabasePath,
): Promise<
Array<
Appeals | Commissions | Contacts | Events | Meetings | Mentorships | Staff
>
> => {
const query = { };
switch (route) {
case "appeals":
return await database.appeals.findMany(query);
case "commissions":
return await database.commissions.findMany(query);
case "contacts":
return await database.contacts.findMany(query);
case "events":
return await database.events.findMany(query);
case "meetings":
return await database.meetings.findMany(query);
case "mentorships":
return await database.mentorships.findMany(query);
case "staff":
return await database.staff.findMany(query);
default:
return [];
}
};
/**
* Checks if a submission exists in the database.
* @param database - The Prisma client.
* @param route - The type of data to check.
* @param id - The ID of the submission to check.
* @returns A boolean indicating if the submission exists.
*/
const checkSubmissionExists = async(
database: PrismaClient,
route: DatabasePath,
id: string,
): Promise<boolean> => {
const query = { where: { id } };
switch (route) {
case "appeals":
return Boolean(await database.appeals.findUnique(query));
case "commissions":
return Boolean(await database.commissions.findUnique(query));
case "contacts":
return Boolean(await database.contacts.findUnique(query));
case "events":
return Boolean(await database.events.findUnique(query));
case "meetings":
return Boolean(await database.meetings.findUnique(query));
case "mentorships":
return Boolean(await database.mentorships.findUnique(query));
case "staff":
return Boolean(await database.staff.findUnique(query));
default:
return false;
}
};
/**
* Marks a submission as reviewed in the database.
* @param database - The Prisma client.
* @param route - The type of data to mark.
* @param id - The ID of the submission to mark.
*/
const markSubmissionReviewed = async(
database: PrismaClient,
route: DatabasePath,
id: string,
): Promise<void> => {
const update = {
where: {
id,
},
};
switch (route) {
case "appeals":
await database.appeals.delete(update);
break;
case "commissions":
await database.commissions.delete(update);
break;
case "contacts":
await database.contacts.delete(update);
break;
case "events":
await database.events.delete(update);
break;
case "meetings":
await database.meetings.delete(update);
break;
case "mentorships":
await database.mentorships.delete(update);
break;
case "staff":
await database.staff.delete(update);
break;
default:
break;
}
};
export {
listUnreviewedSubmissions,
checkSubmissionExists,
markSubmissionReviewed,
};