From ad2b5e38eb8310ebf550e88cd7e1f6bf54da3e94 Mon Sep 17 00:00:00 2001 From: LieutenantRoger Date: Fri, 4 Feb 2022 13:48:38 +0800 Subject: [PATCH 1/2] rcrm-migration-2 --- package.json | 5 +- .../job-rcrm-status-migration-v2/backup.js | 52 +++++++++++++++++++ .../job-rcrm-status-migration-v2/migration.js | 49 +++++++++++++++++ .../job-rcrm-status-migration-v2/restore.js | 49 +++++++++++++++++ .../temp/jobs-backup.json | 1 + 5 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 scripts/job-rcrm-status-migration-v2/backup.js create mode 100644 scripts/job-rcrm-status-migration-v2/migration.js create mode 100644 scripts/job-rcrm-status-migration-v2/restore.js create mode 100644 scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json diff --git a/package.json b/package.json index b7e69924..0841db9f 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,10 @@ "migrate:restore-withdrawn": "node scripts/withdrawn-migration/restore.js", "migrate:backup-rcrm-status": "node scripts/job-rcrm-status-migration/backup.js", "migrate:migration-rcrm-status": "node scripts/job-rcrm-status-migration/migration.js", - "migrate:restore-rcrm-status": "node scripts/job-rcrm-status-migration/restore.js" + "migrate:restore-rcrm-status": "node scripts/job-rcrm-status-migration/restore.js", + "migrate:backup-rcrm-status-v2": "node scripts/job-rcrm-status-migration-v2/backup.js", + "migrate:migration-rcrm-status-v2": "node scripts/job-rcrm-status-migration-v2/migration.js", + "migrate:restore-rcrm-status-v2": "node scripts/job-rcrm-status-migration-v2/restore.js" }, "keywords": [], "author": "", diff --git a/scripts/job-rcrm-status-migration-v2/backup.js b/scripts/job-rcrm-status-migration-v2/backup.js new file mode 100644 index 00000000..bf19b4b7 --- /dev/null +++ b/scripts/job-rcrm-status-migration-v2/backup.js @@ -0,0 +1,52 @@ +/** + * Back up the jobs that we will update it's status + */ +const fs = require('fs') +const path = require('path') +const request = require('superagent') +const { Job } = require('../../src/models') +const logger = require('../../src/common/logger') + +const currentStep = 'Backup' + +async function backup () { + logger.info({ component: currentStep, message: '*************************** Backup process started ***************************' }) + const filePath = path.join(__dirname, '/temp/') + if (fs.existsSync(filePath)) { + fs.rmdirSync(filePath, { recursive: true }) + } + fs.mkdirSync(filePath) + let { body: jobs } = await request.get('https://www.topcoder-dev.com/api/recruit/jobs?job_status=1') + jobs = jobs.map((item) => item.slug) + const backupJobs = [] + if (jobs && jobs.length > 0) { + try { + const jbsInDb = await Job.findAll({ + where: { rcrmStatus: 'Open' } + }) + for (const j of jbsInDb) { + if (jobs.indexOf(j.externalId) < 0) { + // The open job exists in taas but not showing up on Community-App + backupJobs.push(j.externalId) + } + } + fs.writeFileSync(filePath + 'jobs-backup.json', JSON.stringify( + backupJobs + )) + logger.info({ component: `${currentStep} Sub`, message: `There are ${backupJobs.length} jobs that need to be updated` }) + } catch (err) { + logger.error({ component: currentStep, message: err.message }) + process.exit(1) + } + } + logger.info({ component: `${currentStep}`, message: `Report: there are ${backupJobs.length} jobs in total` }) + logger.info({ component: currentStep, message: '*************************** Backup process finished ***************************' }) +} + +backup().then(() => { + logger.info({ component: currentStep, message: 'Execution Finished!' }) + process.exit() +}).catch(err => { + logger.error(err.message) + process.exit(1) +}) diff --git a/scripts/job-rcrm-status-migration-v2/migration.js b/scripts/job-rcrm-status-migration-v2/migration.js new file mode 100644 index 00000000..dd8b1082 --- /dev/null +++ b/scripts/job-rcrm-status-migration-v2/migration.js @@ -0,0 +1,49 @@ +/** + * Migration the job rcrm status into Open status + */ +const fs = require('fs') +const path = require('path') +const { Job } = require('../../src/models') +const logger = require('../../src/common/logger') + +const currentStep = 'Migration' + +async function migration () { + logger.info({ component: currentStep, message: '*************************** Migration process started ***************************' }) + const filePath = path.join(__dirname, '/temp/') + const files = [] + fs.readdirSync(filePath).forEach(async (file) => { + files.push(`${filePath}${file}`) + }) + let totalSum = 0 + for (let j = 0; j < files.length; j++) { + const data = fs.readFileSync(files[j], 'utf-8') + const rcrmIds = JSON.parse(data) + let summary = 0 + for (let i = 0; i < rcrmIds.length; i++) { + const jbs = await Job.findAll({ + where: { externalId: rcrmIds[i] } + }) + for (let j = 0; j < jbs.length; j++) { + if (jbs[j]) { + const oldStatus = jbs[j].rcrmStatus + const updated = await jbs[j].update({ rcrmStatus: null }) + summary++ + totalSum++ + logger.info({ component: currentStep, message: `job with rcrmId ${rcrmIds[i]} status changed from ${oldStatus} to ${updated.rcrmStatus}` }) + } + } + }; + logger.info({ component: `${currentStep} Sub`, message: `Updated ${summary} jobs from ${files[j]}` }) + } + logger.info({ component: currentStep, message: `Report: Totally Updated ${totalSum} jobs` }) + logger.info({ component: currentStep, message: '*************************** Migration process finished ***************************' }) +} + +migration().then(() => { + logger.info({ component: currentStep, message: 'Execution Finished!' }) + process.exit() +}).catch(err => { + logger.error(err.message) + process.exit(1) +}) diff --git a/scripts/job-rcrm-status-migration-v2/restore.js b/scripts/job-rcrm-status-migration-v2/restore.js new file mode 100644 index 00000000..6eec0145 --- /dev/null +++ b/scripts/job-rcrm-status-migration-v2/restore.js @@ -0,0 +1,49 @@ +/** + * Restore the job rcrm status into Open status + */ +const fs = require('fs') +const path = require('path') +const { Job } = require('../../src/models') +const logger = require('../../src/common/logger') + +const currentStep = 'Restore' + +async function restore () { + logger.info({ component: currentStep, message: '*************************** Restore process started ***************************' }) + const filePath = path.join(__dirname, '/temp/') + const files = [] + fs.readdirSync(filePath).forEach(async (file) => { + files.push(`${filePath}${file}`) + }) + let totalSum = 0 + for (let j = 0; j < files.length; j++) { + const data = fs.readFileSync(files[j], 'utf-8') + const rcrmIds = JSON.parse(data) + let summary = 0 + for (let i = 0; i < rcrmIds.length; i++) { + const jbs = await Job.findAll({ + where: { externalId: rcrmIds[i] } + }) + for (let j = 0; j < jbs.length; j++) { + if (jbs[j]) { + const oldStatus = jbs[j].rcrmStatus + const updated = await jbs[j].update({ rcrmStatus: 'Open' }) + summary++ + totalSum++ + logger.info({ component: currentStep, message: `job with rcrmId ${rcrmIds[i]} status changed from ${oldStatus} to ${updated.rcrmStatus}` }) + } + } + }; + logger.info({ component: `${currentStep} Sub`, message: `Updated ${summary} jobs from ${files[j]}` }) + } + logger.info({ component: currentStep, message: `Report: Totally Restored ${totalSum} jobs` }) + logger.info({ component: currentStep, message: '*************************** Restore process finished ***************************' }) +} + +restore().then(() => { + logger.info({ component: currentStep, message: 'Execution Finished!' }) + process.exit() +}).catch(err => { + logger.error(err.message) + process.exit(1) +}) diff --git a/scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json b/scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json new file mode 100644 index 00000000..0637a088 --- /dev/null +++ b/scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json @@ -0,0 +1 @@ +[] \ No newline at end of file From 6dd38c2a432b2a8be0083a4de52f8ba40ee31996 Mon Sep 17 00:00:00 2001 From: LieutenantRoger Date: Fri, 4 Feb 2022 13:53:12 +0800 Subject: [PATCH 2/2] add sample test data --- data/demo-data.json | 3 ++- scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/data/demo-data.json b/data/demo-data.json index 65d8e306..3df6f98c 100644 --- a/data/demo-data.json +++ b/data/demo-data.json @@ -31,7 +31,8 @@ "createdBy": "57646ff9-1cd3-4d3c-88ba-eb09a395366c", "updatedBy": "00000000-0000-0000-0000-000000000000", "createdAt": "2021-05-09T21:21:10.394Z", - "updatedAt": "2021-05-09T21:21:14.010Z" + "updatedAt": "2021-05-09T21:21:14.010Z", + "rcrmStatus": "Open" }, { "id": "728ff056-63f6-4730-8a9f-3074acad8479", diff --git a/scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json b/scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json index 0637a088..fed864d5 100644 --- a/scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json +++ b/scripts/job-rcrm-status-migration-v2/temp/jobs-backup.json @@ -1 +1 @@ -[] \ No newline at end of file +["88774632"] \ No newline at end of file