aboutsummaryrefslogtreecommitdiffstats
path: root/src/storage/service/storage-cron.service.ts
blob: ede6ce942b74b05177986de8d8343ca6b050dde9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import { Injectable, Logger } from '@nestjs/common';
import { StoredFile } from '../entity/stored-file.entity';
import { LessThan, Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { Cron } from '@nestjs/schedule';

@Injectable()
export class StorageCronService {
  private readonly logger = new Logger(StorageCronService.name);

  constructor(
    @InjectRepository(StoredFile)
    private storedFileRepository: Repository<StoredFile>,
  ) {}

  @Cron('0 30 * * * *')
  async deleteExpired() {
    const filesToDelete = await this.storedFileRepository.find({
      relations: {
        fileMetadata: true,
      },
      where: {
        fileMetadata: {
          validUntil: LessThan(new Date(Date.now())),
        },
      },
    });

    if (filesToDelete.length > 0) {
      await this.storedFileRepository.remove(filesToDelete);
      this.logger.log(`Deleted ${filesToDelete.length} expired files`);
    }
  }
}