feat: use mongoose-sequence to increment order number

This commit is contained in:
RustamRu
2025-02-02 14:51:55 +03:00
parent b3d4aa3c86
commit 759aad2d80
5 changed files with 55 additions and 21 deletions

View File

@@ -1,5 +1,6 @@
const { Schema, model } = require('mongoose')
const { orderStatus } = require('./const')
const { OrderNumberModel } = require('./order.number')
const schema = new Schema({
phone: {
@@ -28,9 +29,6 @@ const schema = new Schema({
required: true
},
orderNumber: {
type: String,
required: true,
unique: true
},
status: {
type: String,
@@ -52,6 +50,18 @@ const schema = new Schema({
},
})
schema.pre('save', async function (next) {
if (this.isNew) {
const counter = await OrderNumberModel.findOneAndUpdate(
{ _id: 'orderNumber' },
{ $inc: { sequenceValue: 1 } },
{ new: true, upsert: true }
)
this.orderNumber = counter.sequenceValue.toString()
}
next()
})
schema.set('toJSON', {
virtuals: true,
versionKey: false,

View File

@@ -0,0 +1,14 @@
const { Schema, model } = require('mongoose')
const schema = new Schema({
_id: {
type: String,
required: true,
},
sequenceValue: {
type: Number,
default: 0
}
})
exports.OrderNumberModel = model('dry-wash-order-number', schema)

View File

@@ -74,21 +74,6 @@ const VALIDATION_MESSAGES = {
},
}
/**
* Generates the next order number incrementing the last order number
* @returns {Promise<string>}
*/
const generateOrderNumber = async () => {
const lastOrder = await OrderModel.findOne().sort({ created: -1 })
if (lastOrder) {
const lastOrderNumber = parseInt(lastOrder.orderNumber ?? '0')
const nextOrderNumber = lastOrderNumber + 1
return String(nextOrderNumber)
}
return '1' // number of the very first order
}
router.post('/create', async (req, res, next) => {
const bodyErrors = []
@@ -144,9 +129,7 @@ router.post('/create', async (req, res, next) => {
startWashTime: washing.begin,
endWashTime: washing.end,
location: washing.location,
orderNumber: await generateOrderNumber(),
status: orderStatus.PROGRESS,
master: '',
notes: '',
created: new Date().toISOString(),
})