egirlskey/packages/backend/src/daemons/JanitorService.ts

41 lines
1 KiB
TypeScript
Raw Normal View History

2022-09-17 18:27:08 +00:00
import { Inject, Injectable } from '@nestjs/common';
import { LessThan } from 'typeorm';
import { DI } from '@/di-symbols.js';
2022-09-20 20:33:11 +00:00
import type { AttestationChallengesRepository } from '@/models/index.js';
import { bindThis } from '@/decorators.js';
2022-09-17 18:27:08 +00:00
import type { OnApplicationShutdown } from '@nestjs/common';
const interval = 30 * 60 * 1000;
@Injectable()
export class JanitorService implements OnApplicationShutdown {
2022-09-18 18:11:50 +00:00
private intervalId: NodeJS.Timer;
2022-09-17 18:27:08 +00:00
constructor(
@Inject(DI.attestationChallengesRepository)
private attestationChallengesRepository: AttestationChallengesRepository,
) {
}
/**
* Clean up database occasionally
*/
@bindThis
2022-09-17 18:27:08 +00:00
public start(): void {
const tick = async () => {
await this.attestationChallengesRepository.delete({
createdAt: LessThan(new Date(new Date().getTime() - 5 * 60 * 1000)),
});
};
tick();
2022-09-18 18:11:50 +00:00
this.intervalId = setInterval(tick, interval);
2022-09-17 18:27:08 +00:00
}
@bindThis
2022-09-17 18:27:08 +00:00
public onApplicationShutdown(signal?: string | undefined) {
2022-09-18 18:11:50 +00:00
clearInterval(this.intervalId);
2022-09-17 18:27:08 +00:00
}
}