diff --git a/src/pages/api/approval-workflows/[id]/clone.ts b/src/pages/api/approval-workflows/[id]/clone.ts index be0ee1b8..73fd4153 100644 --- a/src/pages/api/approval-workflows/[id]/clone.ts +++ b/src/pages/api/approval-workflows/[id]/clone.ts @@ -2,7 +2,7 @@ import { ApprovalWorkflow } from "@/interfaces/approval.workflow"; import { sessionOptions } from "@/lib/session"; import { requestUser } from "@/utils/api"; -import { createConfiguredWorkflow } from "@/utils/approval.workflows.be"; +import { createApprovalWorkflow } from "@/utils/approval.workflows.be"; import { withIronSessionApiRoute } from "iron-session/next"; import type { NextApiRequest, NextApiResponse } from "next"; @@ -23,5 +23,5 @@ async function post(req: NextApiRequest, res: NextApiResponse) { const approvalWorkflow: ApprovalWorkflow = req.body; if (approvalWorkflow) - return res.status(201).json(await createConfiguredWorkflow(approvalWorkflow)); + return res.status(201).json(await createApprovalWorkflow("configured-workflows", approvalWorkflow)); } diff --git a/src/pages/api/approval-workflows/[id]/edit.ts b/src/pages/api/approval-workflows/[id]/edit.ts index 19902009..556d0e52 100644 --- a/src/pages/api/approval-workflows/[id]/edit.ts +++ b/src/pages/api/approval-workflows/[id]/edit.ts @@ -2,7 +2,7 @@ import { ApprovalWorkflow } from "@/interfaces/approval.workflow"; import { sessionOptions } from "@/lib/session"; import { requestUser } from "@/utils/api"; -import { updateConfiguredWorkflow } from "@/utils/approval.workflows.be"; +import { updateApprovalWorkflow } from "@/utils/approval.workflows.be"; import { withIronSessionApiRoute } from "iron-session/next"; import { ObjectId } from "mongodb"; import type { NextApiRequest, NextApiResponse } from "next"; @@ -26,7 +26,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) { if (id && approvalWorkflow) { approvalWorkflow._id = new ObjectId(id); - await updateConfiguredWorkflow(approvalWorkflow); + await updateApprovalWorkflow("configured-workflows", approvalWorkflow); return res.status(204).end(); } } diff --git a/src/pages/api/approval-workflows/[id]/index.ts b/src/pages/api/approval-workflows/[id]/index.ts index adc25819..6664ac9d 100644 --- a/src/pages/api/approval-workflows/[id]/index.ts +++ b/src/pages/api/approval-workflows/[id]/index.ts @@ -2,7 +2,7 @@ import { ApprovalWorkflow } from "@/interfaces/approval.workflow"; import { sessionOptions } from "@/lib/session"; import { requestUser } from "@/utils/api"; -import { deleteConfiguredWorkflow, updateConfiguredWorkflow } from "@/utils/approval.workflows.be"; +import { deleteApprovalWorkflow, updateApprovalWorkflow } from "@/utils/approval.workflows.be"; import { withIronSessionApiRoute } from "iron-session/next"; import { ObjectId } from "mongodb"; import type { NextApiRequest, NextApiResponse } from "next"; @@ -24,7 +24,7 @@ async function del(req: NextApiRequest, res: NextApiResponse) { const { id } = req.query as { id?: string }; - if (id) return res.status(200).json(await deleteConfiguredWorkflow(id)); + if (id) return res.status(200).json(await deleteApprovalWorkflow("configured-workflows", id)); } async function put(req: NextApiRequest, res: NextApiResponse) { @@ -40,7 +40,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) { if (id && workflow) { workflow._id = new ObjectId(id); - await updateConfiguredWorkflow(workflow); + await updateApprovalWorkflow("configured-workflows", workflow); return res.status(204).end(); } } diff --git a/src/pages/api/approval-workflows/create.ts b/src/pages/api/approval-workflows/create.ts index cbdddb02..0e292a00 100644 --- a/src/pages/api/approval-workflows/create.ts +++ b/src/pages/api/approval-workflows/create.ts @@ -3,7 +3,7 @@ import { ApprovalWorkflow } from "@/interfaces/approval.workflow"; import { Entity } from "@/interfaces/entity"; import { sessionOptions } from "@/lib/session"; import { requestUser } from "@/utils/api"; -import { replaceConfiguredWorkflowsByEntities } from "@/utils/approval.workflows.be"; +import { replaceApprovalWorkflowsByEntities } from "@/utils/approval.workflows.be"; import { withIronSessionApiRoute } from "iron-session/next"; import type { NextApiRequest, NextApiResponse } from "next"; @@ -31,7 +31,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) { const configuredWorkflows: ApprovalWorkflow[] = filteredWorkflows; const entitiesIds: string[] = userEntitiesWithLabel.map((e) => e.id); - await replaceConfiguredWorkflowsByEntities(configuredWorkflows, entitiesIds); + await replaceApprovalWorkflowsByEntities("configured-workflows", configuredWorkflows, entitiesIds); return res.status(201).json({ ok: true }); } diff --git a/src/pages/approval-workflows/[id]/clone.tsx b/src/pages/approval-workflows/[id]/clone.tsx index b42293a1..6862d53c 100644 --- a/src/pages/approval-workflows/[id]/clone.tsx +++ b/src/pages/approval-workflows/[id]/clone.tsx @@ -24,7 +24,7 @@ import { GrClearOption } from "react-icons/gr"; import { toast, ToastContainer } from "react-toastify"; import { useRouter } from "next/router"; import axios from "axios"; -import { getConfiguredWorkflow } from "@/utils/approval.workflows.be"; +import { getApprovalWorkflow } from "@/utils/approval.workflows.be"; export const getServerSideProps = withIronSessionSsr(async ({ req, res, params }) => { const user = await requestUser(req, res); @@ -35,7 +35,7 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res, params } const { id } = params as { id: string }; - const workflow: ApprovalWorkflow | null = await getConfiguredWorkflow(id); + const workflow: ApprovalWorkflow | null = await getApprovalWorkflow("configured-workflows", id); if (!workflow) return redirect("/approval-workflows") diff --git a/src/pages/approval-workflows/[id]/edit.tsx b/src/pages/approval-workflows/[id]/edit.tsx index 6a1082d8..656c0326 100644 --- a/src/pages/approval-workflows/[id]/edit.tsx +++ b/src/pages/approval-workflows/[id]/edit.tsx @@ -8,7 +8,7 @@ import { CorporateUser, DeveloperUser, MasterCorporateUser, TeacherUser, User } import { sessionOptions } from "@/lib/session"; import { redirect, serialize } from "@/utils"; import { requestUser } from "@/utils/api"; -import { getConfiguredWorkflow } from "@/utils/approval.workflows.be"; +import { getApprovalWorkflow } from "@/utils/approval.workflows.be"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { getEntityUsers } from "@/utils/users.be"; import axios from "axios"; @@ -30,7 +30,7 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res, params } const { id } = params as { id: string }; - const workflow: ApprovalWorkflow | null = await getConfiguredWorkflow(id); + const workflow: ApprovalWorkflow | null = await getApprovalWorkflow("configured-workflows", id); if (!workflow) return redirect("/approval-workflows") diff --git a/src/pages/approval-workflows/[id]/index.tsx b/src/pages/approval-workflows/[id]/index.tsx index 12d79a90..44416384 100644 --- a/src/pages/approval-workflows/[id]/index.tsx +++ b/src/pages/approval-workflows/[id]/index.tsx @@ -11,7 +11,7 @@ import { User } from "@/interfaces/user"; import { sessionOptions } from "@/lib/session"; import { redirect, serialize } from "@/utils"; import { requestUser } from "@/utils/api"; -import { getConfiguredWorkflow } from "@/utils/approval.workflows.be"; +import { getApprovalWorkflow } from "@/utils/approval.workflows.be"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { getSpecificUsers, getUser } from "@/utils/users.be"; import axios from "axios"; @@ -41,7 +41,7 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res, params } const { id } = params as { id: string }; - const workflow: ApprovalWorkflow | null = await getConfiguredWorkflow(id); + const workflow: ApprovalWorkflow | null = await getApprovalWorkflow("configured-workflows", id); if (!workflow) return redirect("/approval-workflows") diff --git a/src/pages/approval-workflows/create.tsx b/src/pages/approval-workflows/create.tsx index 999e971c..03c058e3 100644 --- a/src/pages/approval-workflows/create.tsx +++ b/src/pages/approval-workflows/create.tsx @@ -10,7 +10,7 @@ import { CorporateUser, DeveloperUser, MasterCorporateUser, TeacherUser, User } import { sessionOptions } from "@/lib/session"; import { redirect, serialize } from "@/utils"; import { requestUser } from "@/utils/api"; -import { getConfiguredWorkflowsByEntities } from "@/utils/approval.workflows.be"; +import { getApprovalWorkflowsByEntities } from "@/utils/approval.workflows.be"; import { getEntities } from "@/utils/entities.be"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { getEntitiesUsers } from "@/utils/users.be"; @@ -35,7 +35,7 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => { const userEntitiesWithLabel = await getEntities(user.entities.map(entity => entity.id)); - const allConfiguredWorkflows = await getConfiguredWorkflowsByEntities(userEntitiesWithLabel.map(entity => entity.id)); + const allConfiguredWorkflows = await getApprovalWorkflowsByEntities("configured-workflows", userEntitiesWithLabel.map(entity => entity.id)); return { props: serialize({ diff --git a/src/pages/approval-workflows/index.tsx b/src/pages/approval-workflows/index.tsx index b91ac6ef..18bc8d8a 100644 --- a/src/pages/approval-workflows/index.tsx +++ b/src/pages/approval-workflows/index.tsx @@ -9,7 +9,7 @@ import { User } from "@/interfaces/user"; import { sessionOptions } from "@/lib/session"; import { redirect, serialize } from "@/utils"; import { requestUser } from "@/utils/api"; -import { getConfiguredWorkflows } from "@/utils/approval.workflows.be"; +import { getApprovalWorkflows } from "@/utils/approval.workflows.be"; import { getEntities } from "@/utils/entities.be"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { getSpecificUsers } from "@/utils/users.be"; @@ -36,7 +36,7 @@ export const getServerSideProps = withIronSessionSsr(async ({ req, res }) => { if (shouldRedirectHome(user) || !["admin", "developer", "teacher", "corporate", "mastercorporate"].includes(user.type)) return redirect("/") - const workflows = await getConfiguredWorkflows(); + const workflows = await getApprovalWorkflows("configured-workflows"); const allAssigneeIds: string[] = [ ...new Set( diff --git a/src/utils/approval.workflows.be.ts b/src/utils/approval.workflows.be.ts index f3837a60..0d226a69 100644 --- a/src/utils/approval.workflows.be.ts +++ b/src/utils/approval.workflows.be.ts @@ -4,41 +4,41 @@ import { ObjectId } from "mongodb"; const db = client.db(process.env.MONGODB_DB); -export const getConfiguredWorkflows = async (ids?: string[]) => { +export const getApprovalWorkflows = async (collection: string, ids?: string[]) => { return await db - .collection("configured-workflows") + .collection(collection) .find(ids ? { _id: { $in: ids.map((id) => new ObjectId(id)) } } : {}) .toArray(); }; -export const getConfiguredWorkflow = async (id: string) => { - return await db.collection("configured-workflows").findOne({ _id: new ObjectId(id) }); +export const getApprovalWorkflow = async (collection: string, id: string) => { + return await db.collection(collection).findOne({ _id: new ObjectId(id) }); }; -export const getConfiguredWorkflowsByEntities = async (ids: string[]) => { +export const getApprovalWorkflowsByEntities = async (collection: string, ids: string[]) => { return await db - .collection("configured-workflows") + .collection(collection) .find({ entityId: { $in: ids } }) .toArray(); }; -export const createConfiguredWorkflow = async (workflow: ApprovalWorkflow) => { +export const createApprovalWorkflow = async (collection: string, workflow: ApprovalWorkflow) => { const { _id, ...workflowWithoutId } = workflow as ApprovalWorkflow; - return await db.collection("configured-workflows").insertOne(workflowWithoutId); + return await db.collection(collection).insertOne(workflowWithoutId); }; -export const createConfiguredWorkflows = async (workflows: ApprovalWorkflow[]) => { +export const createApprovalWorkflows = async (collection: string, workflows: ApprovalWorkflow[]) => { if (workflows.length === 0) return; const workflowsWithoutIds: ApprovalWorkflow[] = workflows.map(({ _id, ...wfs }) => wfs); - return await db.collection("configured-workflows").insertMany(workflowsWithoutIds); + return await db.collection(collection).insertMany(workflowsWithoutIds); }; -export const updateConfiguredWorkflow = async (workflow: ApprovalWorkflow) => { +export const updateApprovalWorkflow = async (collection: string, workflow: ApprovalWorkflow) => { const { _id, ...workflowWithoutId } = workflow as ApprovalWorkflow; - return await db.collection("configured-workflows").replaceOne({ _id: _id }, workflowWithoutId); + return await db.collection(collection).replaceOne({ _id: _id }, workflowWithoutId); }; -export const updateConfiguredWorkflows = async (workflows: ApprovalWorkflow[]) => { +export const updateApprovalWorkflows = async (collection: string, workflows: ApprovalWorkflow[]) => { const bulkOperations = workflows.map((workflow) => { const { _id, ...workflowWithoutId } = workflow; return { @@ -49,14 +49,14 @@ export const updateConfiguredWorkflows = async (workflows: ApprovalWorkflow[]) = }; }); - return await db.collection("configured-workflows").bulkWrite(bulkOperations); + return await db.collection(collection).bulkWrite(bulkOperations); }; -export const deleteConfiguredWorkflow = async (id: string) => { - return await db.collection("configured-workflows").deleteOne({ _id: new ObjectId(id) }); +export const deleteApprovalWorkflow = async (collection: string, id: string) => { + return await db.collection(collection).deleteOne({ _id: new ObjectId(id) }); }; -export const replaceConfiguredWorkflowsByEntities = async (workflows: ApprovalWorkflow[], entityIds: string[]) => { +export const replaceApprovalWorkflowsByEntities = async (collection: string, workflows: ApprovalWorkflow[], entityIds: string[]) => { // 1. Keep track of the _id values of all workflows we want to end up with const finalIds = new Set(); @@ -64,17 +64,17 @@ export const replaceConfiguredWorkflowsByEntities = async (workflows: ApprovalWo for (const workflow of workflows) { if (workflow._id) { // Replace the existing ones - await updateConfiguredWorkflow(workflow); + await updateApprovalWorkflow(collection, workflow); finalIds.add(workflow._id.toString()); } else { // Insert if no _id - const insertResult = await createConfiguredWorkflow(workflow); + const insertResult = await createApprovalWorkflow(collection, workflow); finalIds.add(insertResult.insertedId.toString()); } } // 3. Delete any existing workflow (within these entityIds) that wasn't in the final list - await db.collection("configured-workflows").deleteMany({ + await db.collection(collection).deleteMany({ _id: { $nin: Array.from(finalIds).map((id) => new ObjectId(id)), },