From 945b4e63327fc3f92a2eb1c1387afe815e24e55d Mon Sep 17 00:00:00 2001 From: Kavehhn174 Date: Sun, 23 Aug 2026 13:35:30 +0330 Subject: [PATCH] fix(payments): ensure ObjectId casting for duplicate check query --- components/payments/paymentService.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/components/payments/paymentService.js b/components/payments/paymentService.js index 0971ff8..e01fdc9 100644 --- a/components/payments/paymentService.js +++ b/components/payments/paymentService.js @@ -582,19 +582,27 @@ const checkDuplicatePayment = async (query = {}) => { } const filter = { - user: userId, isDeleted: { $ne: true } }; - const targetClasses = []; - if (classId) targetClasses.push(classId); - if (classes) { - if (Array.isArray(classes)) targetClasses.push(...classes); - else targetClasses.push(...String(classes).split(',').map((s) => s.trim()).filter(Boolean)); + if (mongoose.isValidObjectId(userId)) { + filter.user = new mongoose.Types.ObjectId(String(userId)); + } else { + filter.user = userId; } - if (targetClasses.length) { - filter.classes = { $in: targetClasses }; + const rawClasses = []; + if (classId) rawClasses.push(classId); + if (classes) { + if (Array.isArray(classes)) rawClasses.push(...classes); + else rawClasses.push(...String(classes).split(',').map((s) => s.trim()).filter(Boolean)); + } + + if (rawClasses.length) { + const classObjectIds = rawClasses.map((id) => { + return mongoose.isValidObjectId(id) ? new mongoose.Types.ObjectId(String(id)) : id; + }); + filter.classes = { $in: classObjectIds }; } const payments = await Payment.find(filter)