diff options
Diffstat (limited to 'index.js')
-rw-r--r-- | index.js | 25 |
1 files changed, 21 insertions, 4 deletions
@@ -1,7 +1,6 @@ import express from 'express'; import { MongoClient } from 'mongodb'; import { google } from 'googleapis'; -import crypto from 'crypto'; import dotenv from 'dotenv'; import fs from 'fs'; import cors from 'cors'; @@ -49,8 +48,26 @@ async function connectDB() { connectDB(); -function generateSerialNumber(mac) { - return `JPC${crypto.createHash('sha3-224').update(mac).digest('hex').toUpperCase().substring(0, 6)}`; +async function generateSerialNumber() { + const db = client.db(dbName); + const collection = db.collection(collectionName); + + const year = new Date().getFullYear().toString().slice(-2); // Get last two digits of the year + + const latestDevice = await collection.find({ serialNumber: { $regex: `^JPC${year}` } }) + .sort({ serialNumber: -1 }) + .limit(1) + .toArray(); + + let nextNumber = 1; // Default start + + if (latestDevice.length > 0) { + const lastSerial = latestDevice[0].serialNumber; + const lastNumber = parseInt(lastSerial.substring(5, 11), 10); // Extract last 6 digits + nextNumber = lastNumber + 1; + } + + return `JPC${year}${String(nextNumber).padStart(6, '0')}`; } app.post('/upload', async (req, res) => { @@ -70,7 +87,7 @@ app.post('/upload', async (req, res) => { return res.status(400).send(`Device with the same MAC address is already registered, ${existingDevice.serialNumber}`); } - const serialNumber = generateSerialNumber(mac); + const serialNumber = await generateSerialNumber(); const newItem = { serialNumber, |