fix(payments): ensure ObjectId casting for duplicate check query

This commit is contained in:
2026-08-23 13:35:30 +03:30
parent 28d401fd0e
commit 945b4e6332
+16 -8
View File
@@ -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)