diff --git a/backend/src/database/migrations/U1762773409__integrations-backup.sql b/backend/src/database/migrations/U1762773409__integrations-backup.sql new file mode 100644 index 0000000000..e69de29bb2 diff --git a/backend/src/database/migrations/V1762773409__integrations-backup.sql b/backend/src/database/migrations/V1762773409__integrations-backup.sql new file mode 100644 index 0000000000..7125accdbf --- /dev/null +++ b/backend/src/database/migrations/V1762773409__integrations-backup.sql @@ -0,0 +1,10 @@ +create table "integrationsBackup" as +select * +from "integrations" +where 1 = 2; + +alter table "integrationsBackup" + add column "backupCreatedAt" timestamptz not null default now(); + +create index if not exists ix_integration_history_integration_id on "integrationsBackup" ("id"); +create index if not exists ix_integration_history_history_created_at on "integrationsBackup" ("backupCreatedAt"); \ No newline at end of file diff --git a/services/apps/cron_service/src/jobs/integrationsBackup.job.ts b/services/apps/cron_service/src/jobs/integrationsBackup.job.ts new file mode 100644 index 0000000000..e32c1bdf16 --- /dev/null +++ b/services/apps/cron_service/src/jobs/integrationsBackup.job.ts @@ -0,0 +1,24 @@ +import CronTime from 'cron-time-generator' + +import { IS_PROD_ENV } from '@crowd/common' +import { WRITE_DB_CONFIG, getDbConnection } from '@crowd/data-access-layer/src/database' + +import { IJobDefinition } from '../types' + +const job: IJobDefinition = { + name: 'integrations-backup', + cronTime: CronTime.every(1).days(), + timeout: 60 * 60, // 1 hour = 60 * 60 seconds + enabled: async () => IS_PROD_ENV, + process: async (ctx) => { + ctx.log.info('Starting integrations backup job!') + const dbConnection = await getDbConnection(WRITE_DB_CONFIG(), 1, 0) + await dbConnection.query(`insert into "integrationsBackup" select * from "integrations";`) + await dbConnection.query( + `delete from "integrationsBackup" where "backupCreatedAt" < now() - interval '2 months'`, + ) + ctx.log.info('Integrations backup job completed!') + }, +} + +export default job