/** * 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. */ // utils/referenceNumber.util.js const { referenceNumber } = require("../models"); const { sequelize } = require("../models"); const crypto = require("crypto"); const pad = (num, size = 4) => { return String(num).padStart(size, "0"); }; const nextSequence = async (sequenceKey, transaction) => { const options = { where: { sequence_key: sequenceKey }, }; // Only add transaction and lock if transaction is provided if (transaction) { options.transaction = transaction; options.lock = transaction.LOCK.UPDATE; } let sequence = await referenceNumber.findOne(options); if (!sequence) { const createOptions = transaction ? { transaction } : {}; sequence = await referenceNumber.create( { id: crypto.randomUUID(), sequence_key: sequenceKey, current_number: 1, }, createOptions ); return 1; } sequence.current_number += 1; const saveOptions = transaction ? { transaction } : {}; await sequence.save(saveOptions); return sequence.current_number; }; module.exports = { nextSequence, pad };