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

56 lines
1.3 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.
*/
// 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 };