48 lines
1.3 KiB
TypeScript
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,
|
|
},
|
|
},
|
|
})
|
|
}
|
|
}
|