feat: use mongoose-sequence to increment order number
This commit is contained in:
parent
b4c741e9a1
commit
c00f46edff
26
package-lock.json
generated
26
package-lock.json
generated
@ -23,6 +23,7 @@
|
|||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"mongodb": "^6.12.0",
|
"mongodb": "^6.12.0",
|
||||||
"mongoose": "^8.9.2",
|
"mongoose": "^8.9.2",
|
||||||
|
"mongoose-sequence": "^6.0.1",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"pbkdf2-password": "^1.2.1",
|
"pbkdf2-password": "^1.2.1",
|
||||||
"rotating-file-stream": "^3.2.5",
|
"rotating-file-stream": "^3.2.5",
|
||||||
@ -1757,6 +1758,12 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/async": {
|
||||||
|
"version": "3.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
|
||||||
|
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/asynckit": {
|
"node_modules/asynckit": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||||
@ -5226,6 +5233,12 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lodash": {
|
||||||
|
"version": "4.17.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/lodash.includes": {
|
"node_modules/lodash.includes": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
|
||||||
@ -5609,6 +5622,19 @@
|
|||||||
"url": "https://opencollective.com/mongoose"
|
"url": "https://opencollective.com/mongoose"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/mongoose-sequence": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongoose-sequence/-/mongoose-sequence-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-uXnLCW9pu2V49Xw8BmdXdeRugd2mv+ntu3nT2Bbm33pNRmmvHE2GKA+8BASKoQt960McLX4VL78wkb492f6MoQ==",
|
||||||
|
"license": "GPL-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"async": "^3.2.5",
|
||||||
|
"lodash": "^4.17.21"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"mongoose": ">=5"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/mongoose/node_modules/ms": {
|
"node_modules/mongoose/node_modules/ms": {
|
||||||
"version": "2.1.3",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"mongodb": "^6.12.0",
|
"mongodb": "^6.12.0",
|
||||||
"mongoose": "^8.9.2",
|
"mongoose": "^8.9.2",
|
||||||
|
"mongoose-sequence": "^6.0.1",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"pbkdf2-password": "^1.2.1",
|
"pbkdf2-password": "^1.2.1",
|
||||||
"rotating-file-stream": "^3.2.5",
|
"rotating-file-stream": "^3.2.5",
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
const { Schema, model } = require('mongoose')
|
const { Schema, model } = require('mongoose')
|
||||||
const { orderStatus } = require('./const')
|
const { orderStatus } = require('./const')
|
||||||
|
const { OrderNumberModel } = require('./order.number')
|
||||||
|
|
||||||
const schema = new Schema({
|
const schema = new Schema({
|
||||||
phone: {
|
phone: {
|
||||||
@ -28,9 +29,6 @@ const schema = new Schema({
|
|||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
orderNumber: {
|
orderNumber: {
|
||||||
type: String,
|
|
||||||
required: true,
|
|
||||||
unique: true
|
|
||||||
},
|
},
|
||||||
status: {
|
status: {
|
||||||
type: String,
|
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', {
|
schema.set('toJSON', {
|
||||||
virtuals: true,
|
virtuals: true,
|
||||||
versionKey: false,
|
versionKey: false,
|
||||||
|
14
server/routers/dry-wash/model/order.number.js
Normal file
14
server/routers/dry-wash/model/order.number.js
Normal 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)
|
@ -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) => {
|
router.post('/create', async (req, res, next) => {
|
||||||
const bodyErrors = []
|
const bodyErrors = []
|
||||||
|
|
||||||
@ -144,9 +129,7 @@ router.post('/create', async (req, res, next) => {
|
|||||||
startWashTime: washing.begin,
|
startWashTime: washing.begin,
|
||||||
endWashTime: washing.end,
|
endWashTime: washing.end,
|
||||||
location: washing.location,
|
location: washing.location,
|
||||||
orderNumber: await generateOrderNumber(),
|
|
||||||
status: orderStatus.PROGRESS,
|
status: orderStatus.PROGRESS,
|
||||||
master: '',
|
|
||||||
notes: '',
|
notes: '',
|
||||||
created: new Date().toISOString(),
|
created: new Date().toISOString(),
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user