add crone to remove notifs
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
import { Injectable, Logger } from '@nestjs/common';
|
||||||
|
import { Cron } from '@nestjs/schedule';
|
||||||
|
import { EntityManager } from '@mikro-orm/postgresql';
|
||||||
|
import { Notification } from '../entities/notification.entity';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class NotificationCrone {
|
||||||
|
private readonly logger = new Logger(NotificationCrone.name);
|
||||||
|
|
||||||
|
constructor(private readonly em: EntityManager) {}
|
||||||
|
|
||||||
|
// run every day at 03:00 (3:00 AM)
|
||||||
|
@Cron('0 3 * * *', {
|
||||||
|
name: 'deleteOldNotifications',
|
||||||
|
timeZone: 'UTC',
|
||||||
|
})
|
||||||
|
async handleCron() {
|
||||||
|
try {
|
||||||
|
this.logger.debug('Starting daily notification cleanup (removing notifications older than 24 hours)');
|
||||||
|
|
||||||
|
// Calculate the date 24 hours ago
|
||||||
|
const twentyFourHoursAgo = new Date();
|
||||||
|
twentyFourHoursAgo.setHours(twentyFourHoursAgo.getHours() - 24);
|
||||||
|
|
||||||
|
// Find all notifications created more than 24 hours ago
|
||||||
|
const oldNotifications = await this.em.find(Notification, {
|
||||||
|
createdAt: { $lt: twentyFourHoursAgo },
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!oldNotifications || oldNotifications.length === 0) {
|
||||||
|
this.logger.debug('No old notifications found to delete');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.logger.log(`Found ${oldNotifications.length} notifications older than 24 hours to delete`);
|
||||||
|
|
||||||
|
// Delete the old notifications
|
||||||
|
await this.em.removeAndFlush(oldNotifications);
|
||||||
|
|
||||||
|
this.logger.log(`Successfully deleted ${oldNotifications.length} old notifications`);
|
||||||
|
} catch (err) {
|
||||||
|
this.logger.error(`NotificationCrone failed: ${err?.message}`, err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@ import { WsAdminAuthGuard } from './guards/ws-admin-auth.guard';
|
|||||||
import { InAppProcessor } from './processors/in-app.processor';
|
import { InAppProcessor } from './processors/in-app.processor';
|
||||||
import { AdminModule } from '../admin/admin.module';
|
import { AdminModule } from '../admin/admin.module';
|
||||||
import { UserModule } from '../users/user.module';
|
import { UserModule } from '../users/user.module';
|
||||||
|
import { NotificationCrone } from './crone/notification.crone';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -58,6 +59,7 @@ import { UserModule } from '../users/user.module';
|
|||||||
InAppProcessor,
|
InAppProcessor,
|
||||||
NotificationsGateway,
|
NotificationsGateway,
|
||||||
WsAdminAuthGuard,
|
WsAdminAuthGuard,
|
||||||
|
NotificationCrone,
|
||||||
],
|
],
|
||||||
exports: [NotificationService, NotificationPreferenceService, NotificationQueueService, PushNotificationService],
|
exports: [NotificationService, NotificationPreferenceService, NotificationQueueService, PushNotificationService],
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user