128 lines
3.2 KiB
TypeScript
128 lines
3.2 KiB
TypeScript
import { Service } from "typedi";
|
|
import { CronJob } from "cron";
|
|
import MailchimpService from "../MailchimpService/MailchimpService";
|
|
import FilesService from "../FilesService/FilesService";
|
|
import IdNotService from "../IdNotService/IdNotService";
|
|
import { PrismaClient } from "@prisma/client";
|
|
import NotificationBuilder from "@Common/notifications/NotificationBuilder";
|
|
import EmailBuilder from "@Common/emails/EmailBuilder";
|
|
import TotpService from "@Services/customer/TotpService/TotpService";
|
|
// import { PrismaClient } from "@prisma/client";
|
|
|
|
@Service()
|
|
export default class CronService {
|
|
constructor(
|
|
private mailchimpService: MailchimpService,
|
|
private filesService: FilesService,
|
|
private idNotService: IdNotService,
|
|
private notificationBuilder: NotificationBuilder,
|
|
private emailBuilder: EmailBuilder,
|
|
private totpService: TotpService,
|
|
) {}
|
|
|
|
public async sendMails() {
|
|
const cronJob = new CronJob("*/15 * * * * *", async () => {
|
|
// Every 15 seconds
|
|
try {
|
|
await this.mailchimpService.sendEmails();
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
|
|
// Start job
|
|
if (!cronJob.running) {
|
|
cronJob.start();
|
|
}
|
|
}
|
|
|
|
public async sendRecapMails() {
|
|
const cronJob = new CronJob("0 20 * * FRI", async () => {
|
|
// Every friday at 20:00
|
|
try {
|
|
await this.emailBuilder.sendRecapEmails();
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
|
|
// Start job
|
|
if (!cronJob.running) {
|
|
cronJob.start();
|
|
}
|
|
}
|
|
|
|
public async archiveFiles() {
|
|
const cronJob = new CronJob("0 0 * * MON", async () => {
|
|
// Every monday at midnight
|
|
try {
|
|
await this.filesService.archiveOldFiles();
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
|
|
// Start job
|
|
if (!cronJob.running) {
|
|
cronJob.start();
|
|
}
|
|
}
|
|
public async updateUsers() {
|
|
const cronJob = new CronJob("*/5 * * * *", async () => {
|
|
// Once a day at midnight
|
|
try {
|
|
await this.idNotService.updateOffices();
|
|
await this.idNotService.updateUsers();
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
// Start job
|
|
if (!cronJob.running) {
|
|
cronJob.start();
|
|
}
|
|
}
|
|
|
|
public async checkDocumentsExpiration() {
|
|
const cronJob = new CronJob("0 20 * * *", async () => {
|
|
// Once a day at midnight
|
|
try {
|
|
const prisma = new PrismaClient();
|
|
const expiringDocuments15Days: [{ uid: string; expiration_date: Date }] =
|
|
await prisma.$queryRaw`SELECT distinct o.uid, f.created_at as expiration_date
|
|
FROM documents d
|
|
JOIN files f ON d.uid=f.document_uid
|
|
JOIN office_folders o ON o.uid=d.folder_uid
|
|
WHERE o.folder_anchor_uid IS null
|
|
AND d.document_status = 'DEPOSITED'
|
|
AND current_date = (DATE(f.created_at) + interval '3 months' - interval '2 days');`;
|
|
|
|
expiringDocuments15Days.forEach((expiringFolder) => {
|
|
this.notificationBuilder.sendDocumentExpiringSoonNotification(expiringFolder.uid, expiringFolder.expiration_date);
|
|
});
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
// Start job
|
|
if (!cronJob.running) {
|
|
cronJob.start();
|
|
}
|
|
}
|
|
|
|
public async cleanExpiredTotpCodes() {
|
|
const cronJob = new CronJob("0 0 * * *", async () => {
|
|
// Once a day at midnight
|
|
try {
|
|
await this.totpService.cleanExpiredTotpCodes();
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
});
|
|
// Start job
|
|
if (!cronJob.running) {
|
|
cronJob.start();
|
|
}
|
|
}
|
|
}
|