fix(professors, settings): add auto-migration for legacy professors, deep populate user in class/session/course services, and fix SMS bypass number persistence

This commit is contained in:
2026-08-26 05:17:41 +03:30
parent 0a022c0917
commit 43404f2dfc
12 changed files with 337 additions and 57 deletions
+12 -8
View File
@@ -86,15 +86,16 @@ const toPublicTemplates = (storedMap, notificationMap = {}) => {
const formatBypassNumbers = (list) => {
if (!Array.isArray(list)) return [];
return list.map((item) => {
const raw = item.toObject ? item.toObject() : item;
const raw = item && item.toObject ? item.toObject() : item;
if (!raw) return null;
return {
_id: raw._id,
phoneNumber: raw.phoneNumber,
_id: raw._id ? String(raw._id) : undefined,
phoneNumber: raw.phoneNumber || '',
label: raw.label || '',
isActive: raw.isActive !== false,
createdAt: raw.createdAt
};
});
}).filter(Boolean);
};
const getSettings = async () => {
@@ -273,17 +274,20 @@ const saveSettings = async (body = {}) => {
.map((item) => {
const rawPhone = item.phoneNumber || item.phone;
const normalized = normalizePhoneForBypass(rawPhone);
const validId = (item._id && mongoose.Types.ObjectId.isValid(String(item._id)))
? new mongoose.Types.ObjectId(String(item._id))
: new mongoose.Types.ObjectId();
return {
_id: item._id || undefined,
phoneNumber: normalized || rawPhone,
_id: validId,
phoneNumber: normalized || String(rawPhone || '').trim(),
label: String(item.label || '').trim(),
isActive: item.isActive !== false,
createdAt: item.createdAt || new Date()
createdAt: item.createdAt ? new Date(item.createdAt) : new Date()
};
})
.filter((item) => item.phoneNumber && item.phoneNumber.length >= 10);
doc.set('smsBypassNumbers', nextBypass);
doc.smsBypassNumbers = nextBypass;
doc.markModified('smsBypassNumbers');
}
+1
View File
@@ -2,6 +2,7 @@
const test = require('node:test');
const assert = require('node:assert/strict');
const mongoose = require('mongoose');
const { normalizePhoneForBypass } = require('./messagingFlags');
test('SMS Bypass Numbers Utilities', async (t) => {