-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata-migrate.js
More file actions
90 lines (79 loc) · 2.12 KB
/
Copy pathdata-migrate.js
File metadata and controls
90 lines (79 loc) · 2.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
require('dotenv').config()
const mysql = require('mysql2/promise');
const F = require('fxjs/Strict');
const L = require('fxjs/Lazy');
const {
JWT_TABLE_NAMES,
TRANSFORM,
WECHICKEN_TABLE_NAMES,
PAGE_SIZE,
} = require('./data-migration-helper/constants');
const {
getRows,
createInsertIntoQuery,
truncateTable,
alterAutoIncrement,
filterPipe,
executeQuery,
getChunksByPageSize,
} = require('./data-migration-helper/functions');
const {
updateUsersBlogTypeId,
updateManagers,
} = require('./data-migration-helper/update-users');
const init = async wechickenConn => {
return F.go(
WECHICKEN_TABLE_NAMES,
F.map(truncateTable(wechickenConn)),
() => WECHICKEN_TABLE_NAMES,
F.map(alterAutoIncrement(wechickenConn))
);
}
const etl = async (jwtConn, wechickenConn) => {
return F.go(
JWT_TABLE_NAMES,
F.map(getRows(jwtConn)),
L.zip(TRANSFORM),
F.map(([f, rows]) => F.map(f, rows)),
L.zip(WECHICKEN_TABLE_NAMES),
L.map(filterPipe),
L.map(getChunksByPageSize(PAGE_SIZE)),
L.flat,
L.map(createInsertIntoQuery),
F.map(executeQuery(wechickenConn))
)
}
const main = async () => {
let jwtConn
let wechickenConn
try {
jwtConn = await mysql.createConnection({
host: process.env.JWT_HOST,
user: process.env.JWT_USER,
port: process.env.JWT_PORT,
database: process.env.JWT_DATABASE,
password: process.env.JWT_PASSWORD,
})
wechickenConn = await mysql.createConnection({
host: process.env.WECHICKEN_HOST,
user: process.env.WECHICKEN_USER,
port: process.env.WECHICKEN_PORT,
database: process.env.WECHICKEN_DATABASE,
password: process.env.WECHICKEN_PASSWORD,
})
await init(wechickenConn)
console.log('ALL TABLE CLEANSING SUCCEED')
await etl(jwtConn, wechickenConn)
console.log('ALL DATA MIGRATION SUCCEED')
await updateUsersBlogTypeId(wechickenConn)
console.log('USERS BLOG TYPE ID UPDATED')
await updateManagers(wechickenConn)
console.log('USERS IS_MANAGER UPDATED')
} catch (e) {
console.error(e)
} finally {
await jwtConn.end()
await wechickenConn.end()
}
}
main()