Skip to content

Commit 0235a16

Browse files
committed
Adding sync script
1 parent 69422f5 commit 0235a16

File tree

5 files changed

+177
-4
lines changed

5 files changed

+177
-4
lines changed

config/default.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ module.exports = {
3131
RESOURCE_TERMS_UPDATE_TOPIC: process.env.RESOURCE_TERMS_UPDATE_TOPIC || 'terms.notification.resource.updated',
3232
RESOURCE_TERMS_DELETE_TOPIC: process.env.RESOURCE_TERMS_DELETE_TOPIC || 'terms.notification.resource.deleted',
3333
USER_AGREED_TERMS_TOPIC: process.env.USER_AGREED_TERMS_TOPIC || 'terms.notification.user.agreed',
34-
DOCUSIGN_ENVELOPE_CREATE_TOPIC: process.env.DOCUSIGN_ENVELOPE_CREATE_TOPIC || 'terms.notification.docusign.envelop.created',
34+
DOCUSIGN_ENVELOPE_CREATE_TOPIC: process.env.DOCUSIGN_ENVELOPE_CREATE_TOPIC || 'terms.notification.docusign.envelope.created',
3535
TERMS_EMAIL_SUPPORT_TOPIC: process.env.TERMS_UPDATE_TOPIC || 'terms.action.email.support',
3636
AGREE_FOR_DOCUSIGN_TEMPLATE: process.env.AGREE_FOR_DOCUSIGN_TEMPLATE || '999a26ad-b334-453c-8425-165d4cf496d7',
3737
AGREE_ELECTRONICALLY: process.env.AGREE_ELECTRONICALLY || '2c78f834-61f4-11ea-bd4f-3c15c2e2c206',

data_migration/package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

data_migration/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
"clean": "node index.js clean",
88
"restart": "node index.js force",
99
"start": "node index.js",
10+
"sync": "node sync.js",
1011
"test-data": "node test/testData.js"
1112
},
1213
"author": "TCSCODER",
1314
"license": "none",
1415
"dependencies": {
1516
"bluebird": "^3.5.5",
1617
"config": "^3.2.0",
17-
"informix-wrapper": "git+https://github.com/appirio-tech/informix-wrapper.git",
18+
"informix-wrapper": "git+https://github.com/appirio-tech/informix-wrapper.git#less-logs",
1819
"lodash": "^4.17.14",
1920
"pg": "^7.10.0",
2021
"pg-hstore": "^2.3.2",

data_migration/src/syncService.js

+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
const { executeQueryAsync } = require('./common/informixWrapper')
2+
const logger = require('./common/logger')
3+
const models = require('./models')
4+
// const { post } = require('superagent')
5+
const UserTermsOfUseXref = models.UserTermsOfUseXref
6+
const DocusignEnvelope = models.DocusignEnvelope
7+
// const sequelize = require('sequelize')
8+
const Sequelize = require('sequelize')
9+
const config = require('config')
10+
const { difference, find, extend } = require('lodash')
11+
const sequelize = new Sequelize(config.get('POSTGRES_URL'), {
12+
logging: false
13+
})
14+
15+
const SYNC_START_DATE = '2020-01-01'
16+
17+
async function migrateUserTerms () {
18+
const informixTableName = 'user_terms_of_use_xref'
19+
const databaseName = 'common_oltp'
20+
let running = true
21+
let skip = 0
22+
let limit = 20
23+
24+
while (running) {
25+
// get terms from informix
26+
const query = `select skip ${skip} limit ${limit} DISTINCT(terms_of_use_id) from ${informixTableName} order by terms_of_use_id asc`
27+
const data = await executeQueryAsync(databaseName, query)
28+
logger.warn(`Number of Terms: ${data.length}`)
29+
if (data.length < 1) running = false
30+
for (let i = 0; i < data.length; i += 1) {
31+
const termsOfUseId = data[i].terms_of_use_id
32+
const userQuery = `select * from ${informixTableName} WHERE terms_of_use_id = ${termsOfUseId} AND create_date > DATE("${SYNC_START_DATE}") order by user_id asc`
33+
// logger.debug(`userQuery ${JSON.stringify(userQuery)}`)
34+
const userData = await executeQueryAsync(databaseName, userQuery)
35+
const oldIds = userData.map(r => r.user_id)
36+
if (oldIds.length > 0) {
37+
const postgresTermsOfUseInfoQuery = `select "id", "legacyId" from ${config.DB_SCHEMA_NAME}."TermsOfUse" tu
38+
where tu."legacyId" = ${termsOfUseId}`
39+
const [infoResult, metadataResult] = await sequelize.query(postgresTermsOfUseInfoQuery)
40+
41+
// logger.debug(`Checking ${JSON.stringify(infoResult)}`)
42+
43+
const postgresTermsOfUseQuery = `select ux.*, tu."legacyId" from ${config.DB_SCHEMA_NAME}."UserTermsOfUseXref" ux
44+
left join ${config.DB_SCHEMA_NAME}."TermsOfUse" tu on ux."termsOfUseId" = tu.id
45+
where ux.created > '${SYNC_START_DATE}' AND tu."legacyId" = ${termsOfUseId}`
46+
47+
// logger.debug(`postgres ${JSON.stringify(postgresTermsOfUseQuery)}`)
48+
// const newUserTerms = await UserTermsOfUseXref.findAll(postgresTermsOfUseQuery)
49+
const [results, metadata] = await sequelize.query(postgresTermsOfUseQuery)
50+
// logger.debug(`Old IDs: ${JSON.stringify(oldIds)}`)
51+
let idsToAdd = []
52+
if (results.length > 0) {
53+
// logger.debug(JSON.stringify(results))
54+
const newIds = results.map(r => r.userId)
55+
// logger.debug(`New IDs: ${JSON.stringify(newIds)}`)
56+
idsToAdd = difference(oldIds, newIds)
57+
} else {
58+
// logger.debug(`New IDs: none`)
59+
idsToAdd = oldIds
60+
}
61+
logger.debug(`User IDs to Add to V5 for Terms ID: ${infoResult[0].id} - ${JSON.stringify(idsToAdd.length)}`)
62+
63+
if (idsToAdd.length > 0) {
64+
// const toAdd = []
65+
for (const id of idsToAdd) {
66+
// logger.debug(`Finding ${JSON.stringify({ user_id: id })} in ${JSON.stringify(userData)}`)
67+
const obj = find(userData, { user_id: id })
68+
// logger.debug(`Found ${JSON.stringify(obj.create_date)}`)
69+
await UserTermsOfUseXref.create({
70+
userId: id,
71+
termsOfUseId: infoResult[0].id,
72+
created: obj.create_date
73+
})
74+
}
75+
} else {
76+
logger.debug(`IDs in Informix and Postgres are in sync`)
77+
}
78+
} else {
79+
logger.debug(`No Records, Skipping id: ${data[i].terms_of_use_id}`)
80+
}
81+
}
82+
83+
skip += data.length
84+
}
85+
}
86+
87+
async function migrateDocusignEnvelopes () {
88+
const informixTableName = 'docusign_envelope'
89+
const databaseName = 'informixoltp'
90+
let running = true
91+
let skip = 0
92+
let limit = 50
93+
94+
while (running) {
95+
logger.debug(`-- Running skip ${skip}`)
96+
// get terms from informix
97+
const query = `select skip ${skip} limit ${limit} * from ${informixTableName} where is_completed = 1 order by docusign_envelope_id asc`
98+
const data = await executeQueryAsync(databaseName, query)
99+
// logger.warn(`Number of Envelopes: ${data.length}`)
100+
if (data.length < 1) running = false
101+
for (let i = 0; i < data.length; i += 1) {
102+
const obj = data[i]
103+
const newObj = { id: obj.docusign_envelope_id, docusignTemplateId: obj.docusign_template_id, userId: obj.user_id }
104+
const docusignResult = await DocusignEnvelope.findOne({ where: newObj })
105+
106+
// logger.debug(`Result: ${JSON.stringify(docusignResult)}`)
107+
if (!docusignResult) {
108+
newObj.isCompleted = obj.is_completed
109+
await DocusignEnvelope.create(newObj)
110+
logger.debug(`Create New Entry ${JSON.stringify(newObj)}`)
111+
} else {
112+
// logger.debug(`Found Envelope ${obj.docusign_envelope_id}`)
113+
}
114+
}
115+
skip += data.length
116+
}
117+
}
118+
119+
module.exports = {
120+
migrateUserTerms,
121+
migrateDocusignEnvelopes
122+
}

data_migration/sync.js

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
const fs = require('fs')
2+
const path = require('path')
3+
const config = require('config')
4+
// const migrateTermsForResource = require('./src/migrateTermsForResource')
5+
// const migrateTable = require('./src/migrateTable')
6+
const syncService = require('./src/syncService')
7+
const models = require('./src/models')
8+
const logger = require('./src/common/logger')
9+
10+
// const progressInfo = require('./progress/progress.json')
11+
12+
const informixTableNames = {
13+
DocusignEnvelope: 'docusign_envelope',
14+
UserTermsOfUseXref: 'user_terms_of_use_xref'
15+
}
16+
17+
async function clearTargetDatabase () {
18+
console.log('Clear target database')
19+
await models.sequelize.query(`delete from ${config.DB_SCHEMA_NAME}."UserTermsOfUseXref"`)
20+
await models.sequelize.query(`delete from ${config.DB_SCHEMA_NAME}."DocusignEnvelope"`)
21+
22+
const filePath = path.join(__dirname, '/progress/progress.json')
23+
await fs.writeFileAsync(filePath, JSON.stringify({}, null, 4))
24+
}
25+
26+
const steps = ['DocusignEnvelope', 'UserTermsOfUseXref']
27+
28+
async function sync () {
29+
logger.debug('Run Sync!!!')
30+
await syncService.migrateUserTerms()
31+
// await syncService.migrateDocusignEnvelopes()
32+
//get ids from UserTermsOfUseXref
33+
// look up in postres
34+
// if not, add
35+
36+
//get ids from DocusignEnvelope
37+
// await syncService.docusignEnvelopes()
38+
// look up in postgres
39+
// if not, add
40+
}
41+
42+
sync()
43+
.then(() => {
44+
console.log('Done')
45+
process.exit()
46+
})
47+
.catch(e => {
48+
console.log(e)
49+
process.exit(1)
50+
})

0 commit comments

Comments
 (0)