Multiple implementations of the same back-end application. The aim is to provide quick, side-by-side comparisons of different technologies (languages, frameworks, libraries) while preserving consistent business logic across all implementations.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

48 lines
2.2 KiB

import { Injectable, OnModuleInit } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import { HandleExpiredItemsCommand } from '../../application/commands/handle-expired-items.command';
import { LoggerService } from '../../application/services/logger.service';
@Injectable()
export class ExpiredItemsSchedulerService implements OnModuleInit {
constructor(
private readonly handleExpiredItemsCommand: HandleExpiredItemsCommand,
private readonly logger: LoggerService,
) {}
async onModuleInit(): Promise<void> {
this.logger.log('ExpiredItemsSchedulerService initialized', ExpiredItemsSchedulerService.name);
// Process expired items immediately on startup
try {
this.logger.log('Processing expired items on startup...', ExpiredItemsSchedulerService.name);
await this.handleExpiredItemsCommand.execute();
this.logger.log('Startup expired items processing completed', ExpiredItemsSchedulerService.name);
} catch (error) {
this.logger.error(`Failed to process expired items on startup: ${error.message}`, undefined, ExpiredItemsSchedulerService.name);
}
}
@Cron(CronExpression.EVERY_MINUTE)
async handleExpiredItemsCron(): Promise<void> {
try {
this.logger.log('Starting scheduled expired items processing', ExpiredItemsSchedulerService.name);
await this.handleExpiredItemsCommand.execute();
this.logger.log('Scheduled expired items processing completed', ExpiredItemsSchedulerService.name);
} catch (error) {
this.logger.error(`Failed to process expired items: ${error.message}`, undefined, ExpiredItemsSchedulerService.name);
// Continue running despite errors - don't let one failure stop the scheduler
}
}
@Cron('0 0 * * *') // Every day at midnight
async handleExpiredItemsDaily(): Promise<void> {
try {
this.logger.log('Starting daily expired items processing at midnight', ExpiredItemsSchedulerService.name);
await this.handleExpiredItemsCommand.execute();
this.logger.log('Daily expired items processing completed', ExpiredItemsSchedulerService.name);
} catch (error) {
this.logger.error(`Failed to process expired items at midnight: ${error.message}`, undefined, ExpiredItemsSchedulerService.name);
}
}
}