import { Module } from "@/interfaces"; import { getApprovalWorkflowByFormIntaker, createApprovalWorkflow } from "@/utils/approval.workflows.be"; import client from "@/lib/mongodb"; const db = client.db(process.env.MONGODB_DB); /* export async function createApprovalWorkflowsOnExamCreation(examAuthor: string, examEntities: string[], examId: string, examModule: string) { const results = await Promise.all( examEntities.map(async (entity) => { const configuredWorkflow = await getApprovalWorkflowByFormIntaker(entity, examAuthor); if (!configuredWorkflow) { return { entity, created: false }; } configuredWorkflow.modules.push(examModule as Module); configuredWorkflow.name = examId; configuredWorkflow.examId = examId; configuredWorkflow.entityId = entity; configuredWorkflow.startDate = Date.now(); try { await createApprovalWorkflow("active-workflows", configuredWorkflow); return { entity, created: true }; } catch (error: any) { return { entity, created: false }; } }) ); const successCount = results.filter((r) => r.created).length; const totalCount = examEntities.length; return { successCount, totalCount, }; } */ // TEMPORARY BEHAVIOUR! ONLY THE FIRST CONFIGURED WORKFLOW FOUND IS STARTED export async function createApprovalWorkflowOnExamCreation(examAuthor: string, examEntities: string[], examId: string, examModule: string) { let successCount = 0; let totalCount = 0; for (const entity of examEntities) { const configuredWorkflow = await getApprovalWorkflowByFormIntaker(entity, examAuthor); if (!configuredWorkflow) { continue; } totalCount = 1; // a workflow was found configuredWorkflow.modules.push(examModule as Module); configuredWorkflow.name = examId; configuredWorkflow.examId = examId; configuredWorkflow.entityId = entity; configuredWorkflow.startDate = Date.now(); configuredWorkflow.steps[0].completed = true; configuredWorkflow.steps[0].completedBy = examAuthor; configuredWorkflow.steps[0].completedDate = Date.now(); try { await createApprovalWorkflow("active-workflows", configuredWorkflow); successCount = 1; break; // Stop after the first success } catch (error: any) { break; } } // prettier-ignore if (totalCount === 0) { // current behaviour: if no workflow was found skip approval process await db.collection(examModule).updateOne( { id: examId }, { $set: { id: examId, access: "private" }}, { upsert: true } ); } return { successCount, totalCount, }; }