acadflow / services /idGenerator.js
skandaedutech's picture
Upload 14 files
0d3ef02 verified
Raw
History Blame
1.43 kB
const db = require('../db');
/**
* Generate the next sequential Student ID (e.g., SKUEDU0701)
*/
async function generateNextStudentId() {
try {
const now = new Date();
const currentMonth = String(now.getMonth() + 1).padStart(2, '0');
const prefix = `SKUEDU${currentMonth}`;
let maxNum = 0;
// Fetch all leads that have an ID starting with the current prefix
const { data: allLeads, error: maxIdError } = await db
.from('leads')
.select('student_id')
.not('student_id', 'is', null)
.like('student_id', `${prefix}%`);
if (!maxIdError && allLeads && allLeads.length > 0) {
allLeads.forEach(lead => {
const id = lead.student_id.toUpperCase();
if (id.startsWith(prefix)) {
const numPart = parseInt(id.replace(prefix, ''), 10);
if (!isNaN(numPart) && numPart > maxNum) {
maxNum = numPart;
}
}
});
}
const nextNum = String(maxNum + 1).padStart(2, '0'); // at least 2 digits e.g. 01, 02
return `${prefix}${nextNum}`;
} catch (err) {
console.error('Error generating student ID:', err);
// Fallback if DB fails
const currentMonth = String(new Date().getMonth() + 1).padStart(2, '0');
return `SKUEDU${currentMonth}${String(Math.floor(Math.random() * 90) + 10)}`;
}
}
module.exports = {
generateNextStudentId
};