diff --git a/devops/ppd.values.yaml b/devops/ppd.values.yaml index 7f09d778..68c828b1 100644 --- a/devops/ppd.values.yaml +++ b/devops/ppd.values.yaml @@ -1,6 +1,6 @@ dockerPullSecret: docker-pull-secret -scwSecretKey: AgCgjF5QEzxT3GYTS5B6cmQ0e+0/qFWzKaUDSi+Vjc7RoameuvaIJvTXMBkS3he1oy1ulbB34v6vpZI2kxnGNqERA/U5BaYDAyfKSBwMAy4br7HVKhhuwkoF5qoG5JzJXseSmqB1U9vncVIGOZWzJc1Y4/eGlWcvLcLyfw2z/WEpyeNiWJfEhTYpJOB7gv0XnRb2U/JM3jRy1QgEUIk1WR6kgBalF+xaczPQ6uKh+PR2pqkbZa3WaKUrddmzNsgEz4d8PZMWt8IBwR2JOQEHUqCd34p/pJNyLdUgcdDhg02DKwn1oRoAxKTbAio/a7WrMbodjCb3TNWIYGal5mFmItZ7Ok/EBmUf4E85eOkTR+j8ynuuiexld3Q5Kw3o8LsHjgzVL9uP+T2rYaKkjtVt+YQRX1U8l9CrsdUEz0/wEBA0jwCWMfnh1qhD5pM/xwwjsEEAcK4rYV+Q7iAgGZZvZBCQ5aEHzrtn5D95tr1GZCV2hmrW6Seu+LKKLVBS1JmsuEsOuhudYsEK9m2RYVcxbjuS5eokKEjNrGobf2oB8rhBByavfw1JTBixR5JrI8lcYlnCa+oEhxXKJY+4Fx5SAB4YaLCMSo5vw6zsFQ3WKQzlEmCFt+EnapS+a+MGrdlwq07OHTDpvgk/1z39hopoCuhhKckGGfErLXsTYQvDOkFu+EPzgY7m7qDw/d9pSiht5tuSOkAqeOgm7tpNkUufZhaXmP+1aT7i+H5gq1JILGAmXzTI5Wc= +scwSecretKey: AgChoEnPitXp4Ny/rVMEcevaWKNVpyj2cJYAcq+yFqKwVwnLB+ffDvwqz9XBHu+6d4Nyyjkf37zUAMoaM21lEDWA7x3zfG2/D/j+rvX1qxzZgLD0mjBk7fGElVm332I6JA83oInes8AMMYEDPLElzHnpKRb9KtkIP4NzgOcCeW0ijft3N7Vroez6LEHsBPCA1I9XjKSkGEDvrO0MhWX3iJOlfz+SPMfJAV7rPawOs0ZmohTHrPW8qIvGDn8HCzKyU8zRBoMt+Ogpf5pH4U3JryEFuqD61KAQgablAM8edPIvsgNno9HAEuC2QtRLYA9aUhuKdaKuS58c9P2E80PHWXIlbpFCg6EugQTgNfnYp+3qDUNz8edeCfapYLvF4s9eCMGyMsGnpDR8EDNOyuGy7Y3l7okX8Xqu464gMp9E+hX7bHkcD6a4xfyIgJcWxsku0tm1TH1dpn4M1UXRuyZZif8P08nuE6MTUL67sAR9J1lpn4lVEL4kflk0pP2tZ5ncgPQFafJrRz05krMb0eU5tb2H4gs7ao/LL6idWo8MM9K1yr8lIuT5x2WW5CX+RjA+i50ex114V6vX3PNP5oVyt+DynTUB9QmXzVm3oLfDc3Cae1uqh7X0CFd+xiztJBtg0VtJaD/xUJcuWfY4cV2lERo9fRrykltzlJqiXHO4nowt8OtN0BcViVV8NJhPhYFzyb4ympxpOlTjm3GETuT2TYhUqdgS9nzleEAbOmOHZdIO2COunPE= lecoffreBack: serviceAccountName: lecoffre-back-sa diff --git a/devops/stg.values.yaml b/devops/stg.values.yaml index 4bacb27d..9f119e2f 100644 --- a/devops/stg.values.yaml +++ b/devops/stg.values.yaml @@ -1,4 +1,4 @@ -dockerPullSecret: id:47c1c301-1f02-49cc-9e5c-c1225a770aa8 +dockerPullSecret: docker-pull-secret scwSecretKey: AgChoEnPitXp4Ny/rVMEcevaWKNVpyj2cJYAcq+yFqKwVwnLB+ffDvwqz9XBHu+6d4Nyyjkf37zUAMoaM21lEDWA7x3zfG2/D/j+rvX1qxzZgLD0mjBk7fGElVm332I6JA83oInes8AMMYEDPLElzHnpKRb9KtkIP4NzgOcCeW0ijft3N7Vroez6LEHsBPCA1I9XjKSkGEDvrO0MhWX3iJOlfz+SPMfJAV7rPawOs0ZmohTHrPW8qIvGDn8HCzKyU8zRBoMt+Ogpf5pH4U3JryEFuqD61KAQgablAM8edPIvsgNno9HAEuC2QtRLYA9aUhuKdaKuS58c9P2E80PHWXIlbpFCg6EugQTgNfnYp+3qDUNz8edeCfapYLvF4s9eCMGyMsGnpDR8EDNOyuGy7Y3l7okX8Xqu464gMp9E+hX7bHkcD6a4xfyIgJcWxsku0tm1TH1dpn4M1UXRuyZZif8P08nuE6MTUL67sAR9J1lpn4lVEL4kflk0pP2tZ5ncgPQFafJrRz05krMb0eU5tb2H4gs7ao/LL6idWo8MM9K1yr8lIuT5x2WW5CX+RjA+i50ex114V6vX3PNP5oVyt+DynTUB9QmXzVm3oLfDc3Cae1uqh7X0CFd+xiztJBtg0VtJaD/xUJcuWfY4cV2lERo9fRrykltzlJqiXHO4nowt8OtN0BcViVV8NJhPhYFzyb4ympxpOlTjm3GETuT2TYhUqdgS9nzleEAbOmOHZdIO2COunPE= diff --git a/src/entries/Cron.ts b/src/entries/Cron.ts index 3ca7e3df..25d0d4eb 100644 --- a/src/entries/Cron.ts +++ b/src/entries/Cron.ts @@ -7,7 +7,8 @@ import CronService from "@Services/common/CronService/CronService"; (async () => { try { const variables = await Container.get(BackendVariables).validate(); - if(variables.ENV === "stg"){ + Container.get(CronService).archiveFiles(); + if(variables.ENV !== "dev"){ Container.get(CronService).sendMails(); } } catch (e) { diff --git a/src/services/common/CronService/CronService.ts b/src/services/common/CronService/CronService.ts index 321e0a91..80e86255 100644 --- a/src/services/common/CronService/CronService.ts +++ b/src/services/common/CronService/CronService.ts @@ -1,14 +1,15 @@ import { Service } from "typedi"; import { CronJob } from "cron"; import MailchimpService from "../MailchimpService/MailchimpService"; +import FilesService from "../FilesService/FilesService"; @Service() export default class CronService { - constructor(private mailchimpService: MailchimpService) {} + constructor(private mailchimpService: MailchimpService, private filesService: FilesService) {} public async sendMails() { - const cronJob = new CronJob("*/15 * * * * *", async () => { + const cronJob = new CronJob("*/15 * * * *", async () => { // Every 15 minutes try { await this.mailchimpService.sendEmails(); } catch (e) { @@ -21,4 +22,19 @@ export default class CronService { 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(); + } + } } diff --git a/src/services/common/FilesService/FilesService.ts b/src/services/common/FilesService/FilesService.ts index 4023b5db..f80ddcc8 100644 --- a/src/services/common/FilesService/FilesService.ts +++ b/src/services/common/FilesService/FilesService.ts @@ -107,4 +107,32 @@ export default class FilesService extends BaseService { return this.filesRepository.deleteKeyAndArchive(uid); } + + /** + * @description : find files to be archived + * @throws {Error} If file key cannot be deleted or archived + */ + public async getFilesToBeArchived() { + return this.filesRepository.findMany({ + where: { + archived_at: null, + created_at: { lt: new Date(Date.now() - 1000 * 60 * 60 * 24 * 30 * 3) }, // 90 days + }, + }); + } + + /** + * @description : find files to be archived + * @throws {Error} If file key cannot be deleted or archived + */ + public async archiveOldFiles() { + const files = await this.getFilesToBeArchived(); + files.forEach(async (file) => { + try { + await this.deleteKeyAndArchive(file.uid); + } catch (error) { + console.error(error); + } + }); + } }