2023-05-07 17:56:55 +03:00
|
|
|
import moment from "moment-timezone";
|
2023-07-01 12:17:45 +00:00
|
|
|
import { Repository } from "typeorm";
|
2023-05-07 17:56:55 +03:00
|
|
|
import { DAYS } from "../utils";
|
|
|
|
import { BaseRepository } from "./BaseRepository";
|
2023-07-01 12:17:45 +00:00
|
|
|
import { dataSource } from "./dataSource";
|
2023-05-07 17:56:55 +03:00
|
|
|
import { MemberCacheItem } from "./entities/MemberCacheItem";
|
|
|
|
|
|
|
|
const STALE_PERIOD = 90 * DAYS;
|
|
|
|
|
|
|
|
export class MemberCache extends BaseRepository {
|
|
|
|
#memberCache: Repository<MemberCacheItem>;
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
super();
|
2023-07-01 12:17:45 +00:00
|
|
|
this.#memberCache = dataSource.getRepository(MemberCacheItem);
|
2023-05-07 17:56:55 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
async deleteStaleData(): Promise<void> {
|
|
|
|
const cutoff = moment().subtract(STALE_PERIOD, "ms").format("YYYY-MM-DD");
|
|
|
|
await this.#memberCache.createQueryBuilder().where("last_seen < :cutoff", { cutoff }).delete().execute();
|
|
|
|
}
|
|
|
|
|
|
|
|
async deleteMarkedToBeDeletedEntries(): Promise<void> {
|
|
|
|
await this.#memberCache
|
|
|
|
.createQueryBuilder()
|
|
|
|
.where("delete_at IS NOT NULL AND delete_at <= NOW()")
|
|
|
|
.delete()
|
|
|
|
.execute();
|
|
|
|
}
|
|
|
|
}
|