twitch-clone/backend/src/module/cron/cron.service.ts

48 lines
1.3 KiB
TypeScript

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,
},
},
})
}
}