30 lines
828 B
TypeScript
30 lines
828 B
TypeScript
import 'dotenv/config'
|
|
import { prisma } from '@/lib/prisma'
|
|
import { config } from '../config/app.config'
|
|
import { unlinkSync, existsSync } from 'fs'
|
|
|
|
async function cleanup() {
|
|
const cutoff = new Date(
|
|
Date.now() - config.DOWNLOAD_LINK_TTL_HOURS * 60 * 60 * 1000
|
|
)
|
|
|
|
const expired = await prisma.download.findMany({
|
|
where: { status: 'DONE', completedAt: { lt: cutoff } },
|
|
select: { id: true, filePath: true },
|
|
})
|
|
|
|
for (const dl of expired) {
|
|
if (dl.filePath && existsSync(dl.filePath)) {
|
|
unlinkSync(dl.filePath)
|
|
}
|
|
await prisma.download.update({
|
|
where: { id: dl.id },
|
|
data: { status: 'FILE_DELETED', deletedAt: new Date() },
|
|
})
|
|
}
|
|
|
|
console.log(`[cron-cleanup] removed ${expired.length} expired file(s)`)
|
|
}
|
|
|
|
cleanup().catch(console.error).finally(() => process.exit(0))
|