From efb3fdbcb9d5518abdc03772fcf04ec6825db6c0 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Sun, 21 Jun 2026 23:59:33 +0100 Subject: [PATCH] Refactored filament recalculation logic to utilize filament SKUs instead of order items, improving efficiency. Updated allowed filters in the filament SKUs route to include 'costWithTax' and modified population logic in the service for better data retrieval. --- .../schemas/management/filament.schema.js | 17 ++++------------- src/routes/management/filamentskus.js | 2 +- src/services/management/filamentskus.js | 2 +- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/database/schemas/management/filament.schema.js b/src/database/schemas/management/filament.schema.js index 1570a87..1642abc 100644 --- a/src/database/schemas/management/filament.schema.js +++ b/src/database/schemas/management/filament.schema.js @@ -25,19 +25,10 @@ filamentSchema.virtual('id').get(function () { filamentSchema.set('toJSON', { virtuals: true }); filamentSchema.statics.recalculate = async function (filament, user) { - const orderItemModel = mongoose.model('orderItem'); - const itemId = filament._id; - const draftOrderItems = await orderItemModel - .find({ - 'state.type': 'draft', - itemType: 'filament', - item: itemId, - }) - .populate('order') - .lean(); - - for (const orderItem of draftOrderItems) { - await orderItemModel.recalculate(orderItem, user); + const filamentSkuModel = mongoose.model('filamentSku'); + const skus = await filamentSkuModel.find({ filament: filament._id }).select('_id').lean(); + for (const sku of skus) { + await filamentSkuModel.recalculate(sku, user); } }; diff --git a/src/routes/management/filamentskus.js b/src/routes/management/filamentskus.js index 285a6ab..e066d0f 100644 --- a/src/routes/management/filamentskus.js +++ b/src/routes/management/filamentskus.js @@ -16,7 +16,7 @@ import { router.get('/', isAuthenticated, (req, res) => { const { page, limit, property, search, sort, order } = req.query; - const allowedFilters = ['_id', 'barcode', 'filament', 'filament._id', 'name', 'color', 'cost']; + const allowedFilters = ['_id', 'barcode', 'filament', 'filament._id', 'name', 'color', 'cost', 'costWithTax']; const filter = getFilter(req.query, allowedFilters); listFilamentSkusRouteHandler(req, res, page, limit, property, filter, search, sort, order); }); diff --git a/src/services/management/filamentskus.js b/src/services/management/filamentskus.js index 3983312..7ba9667 100644 --- a/src/services/management/filamentskus.js +++ b/src/services/management/filamentskus.js @@ -35,7 +35,7 @@ export const listFilamentSkusRouteHandler = async ( search, sort, order, - populate: ['costTaxRate'], + populate: [{ path: 'filament', populate: 'costTaxRate' }, 'costTaxRate'], }); if (result?.error) {