From 9ee59256a910193517a0d8d82eb07e0d11ef8ab9 Mon Sep 17 00:00:00 2001 From: Rustam Date: Sun, 2 Feb 2025 15:11:59 +0300 Subject: [PATCH] feat: generate order number (#69) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавил генерацию номера заказа при создании Co-authored-by: RustamRu Reviewed-on: https://git.bro-js.ru/bro-students/multy-stub/pulls/69 Reviewed-by: Primakov Alexandr Alexandrovich --- package-lock.json | 26 +++++++++++++++++++ package.json | 1 + server/routers/dry-wash/model/order.js | 17 ++++++++++++ server/routers/dry-wash/model/order.number.js | 14 ++++++++++ 4 files changed, 58 insertions(+) create mode 100644 server/routers/dry-wash/model/order.number.js diff --git a/package-lock.json b/package-lock.json index 5470ae5..c39cfa6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "jsonwebtoken": "^9.0.2", "mongodb": "^6.12.0", "mongoose": "^8.9.2", + "mongoose-sequence": "^6.0.1", "morgan": "^1.10.0", "pbkdf2-password": "^1.2.1", "rotating-file-stream": "^3.2.5", @@ -2133,6 +2134,12 @@ "dev": true, "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": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5642,6 +5649,12 @@ "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": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -5995,6 +6008,19 @@ "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/mongodb": { "version": "6.12.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.12.0.tgz", diff --git a/package.json b/package.json index e77732d..8ef622c 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "jsonwebtoken": "^9.0.2", "mongodb": "^6.12.0", "mongoose": "^8.9.2", + "mongoose-sequence": "^6.0.1", "morgan": "^1.10.0", "pbkdf2-password": "^1.2.1", "rotating-file-stream": "^3.2.5", diff --git a/server/routers/dry-wash/model/order.js b/server/routers/dry-wash/model/order.js index 6fdaa25..84f21a5 100644 --- a/server/routers/dry-wash/model/order.js +++ b/server/routers/dry-wash/model/order.js @@ -1,5 +1,6 @@ const { Schema, model } = require('mongoose') const { orderStatus } = require('./const') +const { OrderNumberModel } = require('./order.number') const schema = new Schema({ phone: { @@ -27,6 +28,10 @@ const schema = new Schema({ type: String, required: true }, + orderNumber: { + type: String, + unique: true + }, status: { type: String, required: true, @@ -47,6 +52,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, diff --git a/server/routers/dry-wash/model/order.number.js b/server/routers/dry-wash/model/order.number.js new file mode 100644 index 0000000..195d617 --- /dev/null +++ b/server/routers/dry-wash/model/order.number.js @@ -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) \ No newline at end of file