import { PrismaService } from '@/src/core/prisma/prisma.service' import { MailService } from '@/src/module/libs/mail/mail.service' import { StorageService } from '@/src/module/libs/storage/storage.service' import { Injectable } from '@nestjs/common' import { Cron, CronExpression } from '@nestjs/schedule' @Injectable() export class CronService { constructor( private readonly prismaService: PrismaService, private readonly mailService: MailService, private readonly storageService: StorageService, ) { } @Cron(CronExpression.EVERY_DAY_AT_NOON) private async deleteDeactivatedAccounts() { const sevenDayAgo = new Date() sevenDayAgo.setDate(sevenDayAgo.getDay() - 7) const deactivatedAccounts = await this.prismaService.user.findMany({ where: { isDeactivated: true, deactivatedAt: { lte: sevenDayAgo, }, }, }) for (const user of deactivatedAccounts) { console.log('Deactivate user', user.name, user.email) await this.mailService.sendAccountDeletion(user.email) if (user.avatar) { await this.storageService.remove(user.avatar) } } await this.prismaService.user.deleteMany({ where: { isDeactivated: true, deactivatedAt: { lte: sevenDayAgo, }, }, }) } }