Files
Zumri-Backend/app/utils/idGen.util.js
Sathira Sri Sathara 9d3d431416 feat: implement identity and security features
- Added account types and privileged account types constants.
- Created admin user controller for updating user security fields.
- Developed role assignment controller for managing user roles.
- Implemented validation middleware for request schemas.
- Defined user role and auth session models for database interactions.
- Created services for authentication, email notifications, and OTP handling.
- Developed OAuth service for Google and Apple authentication.
- Added JWT utility functions for token generation and verification.
- Implemented comprehensive tests for authentication, session management, and password policies.
- Created migration for updating user schema and adding new tables for auth sessions and user identities.
2026-09-03 13:56:18 +05:30

172 lines
4.2 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/idGen.util.js
const { v4: uuidv4 } = require("uuid");
const crypto = require("crypto");
const { nextSequence } = require("./referenceNumber.util");
const {log} = require("./consoleLog.utill");
const {generateInquiryNumber} = require("./id/inquiryID.utill");
const { generateRFQNumber } = require("./id/quotation.utill");
const {generatePONumber} = require("./id/po.utill");
const { generateDeliveryNote } = require("./id/dispatchNote.utill");
const generateUserId = () => {
return "usr_" + crypto.randomUUID();
};
const generateCustomerId = () => {
return "cust_" + crypto.randomUUID();
}
const generateBusinessCustomerId = () => {
return "b_cust_" + crypto.randomUUID();
}
const generateClientId = () => {
const prefix = "cli_";
return prefix + uuidv4();
};
const generateInquRefNo = async (port) => {
const reference_number = await generateInquiryNumber(port);
log("Generated Number", reference_number)
return reference_number;
};
const generateInquId = async (port) => {
const prefix = "inq_";
const inquID = prefix + uuidv4();
return inquID;
};
const generateCategoryId = () => {
const prefix = "cte_";
return prefix + uuidv4();
};
const generateRemarkId = () => {
const prefix = "rmk_";
return prefix + uuidv4();
};
const generateTodoId = () => {
const prefix = "tdo_";
return prefix + uuidv4();
};
const generateVendorStatusId = () => {
const prefix = "vst_";
return prefix + uuidv4();
}
const generateVendorId = () => {
const prefix = "vnd_";
return prefix + uuidv4();
}
const generateVendorPICId = () => {
const prefix = "vpic_";
return prefix + uuidv4();
}
const generateVendorDocumentId = () => {
const prefix = "vdoc_";
return prefix + uuidv4();
}
const generateColumnId = () => {
const prefix = "col_";
return prefix + uuidv4();
}
const generatePreCostId = () => {
const prefix = "pc_";
return prefix + uuidv4();
}
const generatePreCostPaymanentId = () => {
const prefix = "pcp_";
return prefix + uuidv4();
}
const generateCalenderId = () => {
const prefix = "cal_";
return prefix + uuidv4();
}
const generateId = () => {
return uuidv4();
};
const generateInvoiceNo = async () => {
const invoiceNumber = await nextSequence("invoice");
return `INV-${invoiceNumber.toString().padStart(6, "0")}`;
}
const generateDocumentReferenceNo = async (type) => {
const normalizedType = String(type).toUpperCase().replace(/[\s_-]+/g, "");
if (normalizedType === "QUOTATION"){
// Implement quotation number generation logic here
return 'N/A'
} else if (normalizedType === "PRECOST"){
// Implement precost number generation logic here
const precostRef = await generateRFQNumber()
return precostRef
} else if (normalizedType === "PO"){
// Implement contract number generation logic here
const Ref = await generatePONumber("OSC/2602")
return Ref
} else if (normalizedType === "BILL"){
return 'N/A'
// Implement bill number generation logic here
} else if (normalizedType === "PAYMENT"){
return 'N/A'
// Implement payment number generation logic here
} else if (normalizedType === "INVOICE"){
// Implement invoice number generation logic here
const invoiceNo = await generateInvoiceNo();
return invoiceNo;
} else if (normalizedType === "CREDITNOTE") {
return 'N/A';
} else if (normalizedType === "DELIVERYNOTE") {
const orderNo = "OSC/2602";
const deliveryNoteNo = await generateDeliveryNote(orderNo);
return deliveryNoteNo;
}else {
throw new Error("Unsupported document type for ID generation");
}
}
module.exports = {
generateUserId,
generateCustomerId,
generateBusinessCustomerId,
generateClientId,
generateInquId,
generateInquRefNo,
generateId,
generateCategoryId,
generateRemarkId,
generateTodoId,
generateVendorStatusId,
generateVendorId,
generateVendorPICId,
generateVendorDocumentId,
generateColumnId,
generatePreCostId,
generatePreCostPaymanentId,
generateDocumentReferenceNo,
generateCalenderId,
};