feat(sms): send class start date, days, and course time
Expose schedule fields on class and invoice templates so SMS can include Jalali start date, weekdays, and hour range.
This commit is contained in:
@@ -5,6 +5,7 @@ const cron = require('node-cron');
|
||||
const Session = require('../components/sessions/sessionModel');
|
||||
const User = require('../components/users/userModel');
|
||||
const { sendClassReminderSms } = require('../utils/senders/smsMessages');
|
||||
const { buildClassScheduleContext } = require('../utils/classSchedule');
|
||||
const logger = require('../utils/logger');
|
||||
|
||||
const parseStartDateTime = (session) => {
|
||||
@@ -36,7 +37,7 @@ const runClassReminderJob = async () => {
|
||||
reminderSentAt: null,
|
||||
day: { $gte: dayFrom, $lte: dayTo },
|
||||
})
|
||||
.populate({ path: 'class', select: 'name students' })
|
||||
.populate({ path: 'class', select: 'name students startDate' })
|
||||
.populate({ path: 'course', select: 'title' })
|
||||
.lean();
|
||||
|
||||
@@ -54,6 +55,10 @@ const runClassReminderJob = async () => {
|
||||
const classLabel = classDoc?.name || session.course?.title || 'کلاس';
|
||||
const timeLabel = session.startTime;
|
||||
const placeLabel = session.place || '-';
|
||||
const classSessions = classDoc?._id
|
||||
? await Session.find({ class: classDoc._id }).select('day startTime endTime').sort({ day: 1 }).lean()
|
||||
: [];
|
||||
const schedule = buildClassScheduleContext(classDoc, classSessions, session);
|
||||
|
||||
const users = await User.find({ _id: { $in: studentIds } }).select('phoneNumber').lean();
|
||||
await Promise.all(
|
||||
@@ -65,7 +70,11 @@ const runClassReminderJob = async () => {
|
||||
classLabel,
|
||||
timeLabel,
|
||||
placeLabel,
|
||||
user._id
|
||||
user._id,
|
||||
{
|
||||
courseName: session.course?.title || classLabel,
|
||||
...schedule
|
||||
}
|
||||
);
|
||||
} catch (err) {
|
||||
logger.error(`[ClassReminderJob] SMS failed for ${user.phoneNumber}: ${err.message}`);
|
||||
|
||||
Reference in New Issue
Block a user