102 lines
2.4 KiB
JavaScript
102 lines
2.4 KiB
JavaScript
/**
|
|
* Copyright (c) 2026 Niolla
|
|
* All rights reserved.
|
|
*
|
|
* This source code is proprietary and confidential.
|
|
* Unauthorized copying, modification, distribution, or use
|
|
* of this file, via any medium, is strictly prohibited.
|
|
*/
|
|
|
|
// app/utils/document.util.js
|
|
|
|
const { Document } = require("../models");
|
|
const { generateId, generateDocumentReferenceNo } = require("./idGen.util");
|
|
const {log} = require("./consoleLog.utill");
|
|
|
|
const DOCUMENT_STATUS = {
|
|
DRAFT: "DRAFT",
|
|
FINAL: "FINAL",
|
|
};
|
|
|
|
const validateStatus = (status) => {
|
|
if (!Object.values(DOCUMENT_STATUS).includes(status)) {
|
|
throw new Error(
|
|
`Invalid status "${status}". Allowed values: ${Object.values(
|
|
DOCUMENT_STATUS,
|
|
).join(", ")}`,
|
|
);
|
|
}
|
|
};
|
|
|
|
const createDraftDocument = async (document, doc_data) => {
|
|
log("Creating draft document data...");
|
|
log("Incoming document data:", JSON.stringify(doc_data, null, 2));
|
|
const result = await Document.create({
|
|
doc_id: generateId(),
|
|
reference_no: doc_data.reference_no || "N/A",
|
|
doc_type: document,
|
|
data: doc_data,
|
|
status: DOCUMENT_STATUS.DRAFT,
|
|
});
|
|
|
|
log("Draft document created with ID:", result.doc_id);
|
|
|
|
return result;
|
|
|
|
};
|
|
|
|
const finalizeDocument = async (document, doc_data) => {
|
|
if (!doc_data.doc_id) {
|
|
throw new Error("Document data ID is required for FINAL status.");
|
|
}
|
|
|
|
const [updatedRows] = await Document.update(
|
|
{
|
|
reference_no: doc_data.reference_no || "N/A",
|
|
doc_type: document,
|
|
data: doc_data,
|
|
status: DOCUMENT_STATUS.FINAL,
|
|
},
|
|
{
|
|
where: {
|
|
doc_id: doc_data.doc_id,
|
|
},
|
|
},
|
|
);
|
|
|
|
if (updatedRows === 0) {
|
|
throw new Error("Document data not found or already updated.");
|
|
}
|
|
|
|
return await Document.findOne({
|
|
where: {
|
|
doc_id: doc_data.doc_id,
|
|
},
|
|
});
|
|
};
|
|
|
|
const createDocumentData = async (document, doc_data, status) => {
|
|
try {
|
|
validateStatus(status);
|
|
|
|
switch (status) {
|
|
case DOCUMENT_STATUS.DRAFT:
|
|
return await createDraftDocument(document, doc_data);
|
|
|
|
case DOCUMENT_STATUS.FINAL:
|
|
return await finalizeDocument(document, doc_data);
|
|
|
|
default:
|
|
throw new Error(`Unhandled document status: ${status}`);
|
|
}
|
|
} catch (error) {
|
|
console.error("❌ Document data operation failed:", error.message);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
createDocumentData,
|
|
DOCUMENT_STATUS,
|
|
};
|