import { Injectable, Logger } from "@nestjs/common"; import { Cron, CronExpression } from "@nestjs/schedule"; import { ContentsRepository } from "../../contents/repositories/contents.repository"; import { ReportsRepository } from "../../reports/repositories/reports.repository"; import { SessionsRepository } from "../../sessions/repositories/sessions.repository"; import { UsersRepository } from "../../users/repositories/users.repository"; @Injectable() export class PurgeService { private readonly logger = new Logger(PurgeService.name); constructor( private readonly sessionsRepository: SessionsRepository, private readonly reportsRepository: ReportsRepository, private readonly usersRepository: UsersRepository, private readonly contentsRepository: ContentsRepository, ) {} // Toutes les nuits à minuit @Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT) async purgeExpiredData() { this.logger.log("Starting automatic data purge..."); try { const now = new Date(); // 1. Purge des sessions expirées const deletedSessions = await this.sessionsRepository.purgeExpired(now); this.logger.log(`Purged ${deletedSessions.length} expired sessions.`); // 2. Purge des signalements obsolètes const deletedReports = await this.reportsRepository.purgeObsolete(now); this.logger.log(`Purged ${deletedReports.length} obsolete reports.`); // 3. Purge des utilisateurs supprimés (Soft Delete > 30 jours) const thirtyDaysAgo = new Date(); thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); const deletedUsers = await this.usersRepository.purgeDeleted(thirtyDaysAgo); this.logger.log( `Purged ${deletedUsers.length} users marked for deletion more than 30 days ago.`, ); // 4. Purge des contenus supprimés (Soft Delete > 30 jours) const deletedContents = await this.contentsRepository.purgeSoftDeleted(thirtyDaysAgo); this.logger.log( `Purged ${deletedContents.length} contents marked for deletion more than 30 days ago.`, ); } catch (error) { this.logger.error("Error during data purge", error); } } }