47 lines
1.8 KiB
TypeScript
Executable File
47 lines
1.8 KiB
TypeScript
Executable File
import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
|
|
import { SchedulerRegistry } from '@nestjs/schedule';
|
|
import { InitService } from '@server/tasks/init/init.service';
|
|
import { ReminderService } from '@server/tasks/reminder/reminder.service';
|
|
import { CronJob } from 'cron';
|
|
|
|
@Injectable()
|
|
export class TasksService implements OnModuleInit {
|
|
private readonly logger = new Logger(TasksService.name);
|
|
|
|
constructor(
|
|
private readonly schedulerRegistry: SchedulerRegistry,
|
|
private readonly initService: InitService,
|
|
private readonly reminderService: ReminderService
|
|
) { }
|
|
|
|
async onModuleInit() {
|
|
this.logger.log('Main node launch');
|
|
await this.initService.init();
|
|
this.logger.log('Initialization successful');
|
|
|
|
try {
|
|
const cronExpression = process.env.DEADLINE_CRON;
|
|
if (!cronExpression) {
|
|
throw new Error('DEADLINE_CRON environment variable is not set');
|
|
}
|
|
|
|
const handleRemindJob = new CronJob(cronExpression, async () => {
|
|
try {
|
|
await this.reminderService.remindDeadline();
|
|
this.logger.log('Reminder successfully processed');
|
|
} catch (reminderErr) {
|
|
this.logger.error('Error occurred while processing reminder', reminderErr);
|
|
}
|
|
});
|
|
|
|
this.schedulerRegistry.addCronJob('remindDeadline', handleRemindJob as any);
|
|
this.logger.log('Start remind cron job');
|
|
handleRemindJob.start();
|
|
} catch (cronJobErr) {
|
|
this.logger.error('Failed to initialize cron job', cronJobErr);
|
|
// Optionally rethrow the error if you want to halt further execution
|
|
// throw cronJobErr;
|
|
}
|
|
}
|
|
}
|