-
Notifications
You must be signed in to change notification settings - Fork 63
/
M00007.js
41 lines (37 loc) · 1.16 KB
/
M00007.js
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
export async function up(knex) {
// Add serviceName to apiSecret schema
await knex.schema.table('apiSecret', (table) => {
table.string('serviceName');
table.unique(['appId', 'serviceName']);
});
const targetServices = (await knex('app').select(['appId', 'services']))
.map(({ appId, services }) => ({
appId,
// Extract service name and id per app
services: JSON.parse(services).map(({ serviceId, serviceName }) => ({
serviceId,
serviceName,
})),
}))
.reduce(
// Convert to array of {appId, serviceId, serviceName}
(apps, { appId, services }) =>
apps.concat(services.map((svc) => ({ appId, ...svc }))),
[],
);
// Update all API secret entries so services can still access the API after
// the change
await Promise.all(
targetServices.map(({ appId, serviceId, serviceName }) =>
knex('apiSecret').update({ serviceName }).where({ appId, serviceId }),
),
);
// Update the table schema deleting the serviceId column
await knex.schema.table('apiSecret', (table) => {
table.dropUnique(['appId', 'serviceId']);
table.dropColumn('serviceId');
});
}
export function down() {
return Promise.reject(new Error('Not Implemented'));
}