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
+35 -17
View File
@@ -41,30 +41,48 @@ const formatProfessorDoc = (doc) => {
const raw = doc.toObject ? doc.toObject({ virtuals: true }) : doc;
const user = raw.user && typeof raw.user === 'object' ? raw.user : null;
const rawName = String(user?.name || raw.name || '').trim();
const parts = rawName.split(/\s+/);
let firstName = rawName;
let surname = '';
if (parts.length > 1) {
firstName = parts[0];
surname = parts.slice(1).join(' ');
const rawUserName = String(user?.name || '').trim();
const rawDocName = String(raw.name || '').trim();
const rawSurname = String(raw.surname || '').trim();
let fullName = rawUserName || (rawDocName ? `${rawDocName} ${rawSurname}`.trim() : '');
let firstName = '';
let surname = rawSurname;
if (fullName) {
const parts = fullName.split(/\s+/);
if (parts.length > 1) {
firstName = parts[0];
surname = parts.slice(1).join(' ');
} else {
firstName = fullName;
}
} else {
firstName = rawDocName;
fullName = `${firstName} ${surname}`.trim();
}
const rawPhone = String(user?.phoneNumber || raw.phoneNumber || raw.phone || '').trim();
const rawNationalId = String(user?.nationalIdCode || raw.nationalIdCode || raw.nationalId || '').trim();
const rawEmail = String(user?.email || raw.email || '').trim();
const rawCard = String(user?.cardNumber || raw.cardNumber || '').trim();
const rawShaba = String(user?.shabaNumber || raw.shabaNumber || raw.iban || '').trim();
return {
_id: raw._id,
id: raw._id,
user: user ? (user._id || user) : raw.user,
userId: user ? (user._id || user) : raw.user,
name: firstName,
surname: surname || raw.surname || '',
fullName: rawName,
nationalIdCode: user?.nationalIdCode || raw.nationalIdCode || '',
nationalId: user?.nationalIdCode || raw.nationalIdCode || '',
phoneNumber: user?.phoneNumber || raw.phoneNumber || '',
phone: user?.phoneNumber || raw.phoneNumber || '',
email: user?.email || raw.email || '',
cardNumber: user?.cardNumber || raw.cardNumber || '',
shabaNumber: user?.shabaNumber || raw.shabaNumber || '',
name: firstName || fullName || 'استاد',
surname: surname || '',
fullName: fullName || firstName || 'استاد',
nationalIdCode: rawNationalId,
nationalId: rawNationalId,
phoneNumber: rawPhone,
phone: rawPhone,
email: rawEmail,
cardNumber: rawCard,
shabaNumber: rawShaba,
bio: raw.bio || '',
expertise: Array.isArray(raw.expertise) ? raw.expertise : [],
courses: raw.courses || [],