56 lines
1.3 KiB
JavaScript
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 }; |