Files
Zumri-Backend/app/utils/document.utill.js
Isuru Bimsara 81d0e65686 first commit
2026-08-14 22:46:02 +05:30

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,
};