generated from aicore/template-nodejs-server
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsetup-stack.js
More file actions
93 lines (89 loc) · 3.45 KB
/
setup-stack.js
File metadata and controls
93 lines (89 loc) · 3.45 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
91
92
93
import {
DATABASE_NAME, EXTENSIONS_DETAILS_TABLE, RELEASE_DETAILS_TABLE, FIELD_EXTENSION_ID, FIELD_RELEASE_ID,
FIELD_TYPE, EXTENSIONS_BUCKET, REGISTRY_FILE
}
from "../constants.js";
import db from "../db.js";
import {S3} from "../s3.js";
// Refer https://json-schema.org/understanding-json-schema/index.html
const schema = {
schema: {
response: {
200: { //HTTP_STATUS_CODES.OK
type: 'object',
required: ['status'],
properties: {
status: {type: 'string'}
}
}
}
}
};
export function getSetupStackSchema() {
return schema;
}
async function _putDataInTable(allExtensionData, tableName) {
let extensionIDs = Object.keys(allExtensionData);
console.log("adding db entries for extensions: ", extensionIDs.length);
let getPromises = [];
for (let i = 0; i < extensionIDs.length; i++) {
let extensionID = extensionIDs[i];
getPromises.push(db.getFromIndex(tableName, {
EXTENSION_ID: extensionID
}));
}
let allGetData = await Promise.all(getPromises);
console.log("got record details from " + tableName);
let putPromises = [], newExtensionsAdded = 0;
for (let i = 0; i < allGetData.length; i++) {
let extensionID = extensionIDs[i];
let currentExtensionData = allExtensionData[extensionID];
currentExtensionData.EXTENSION_ID = extensionID;
let getData = allGetData[i];
if(!getData.isSuccess){
console.error(getData);
continue;
}
if(getData.documents.length === 1){
putPromises.push(db.update(tableName, getData.documents[0].documentId,
currentExtensionData));
} else {
newExtensionsAdded ++;
putPromises.push(db.put(tableName, currentExtensionData));
}
}
console.log(`${newExtensionsAdded} new extension data detected, ${allGetData.length-newExtensionsAdded} old extensions of ${allGetData.length}`);
let allPutData = await Promise.all(putPromises);
console.log("updated record details in " + tableName);
for (let i = 0; i < allPutData.length; i++) {
let putData = allPutData[i];
if(!putData.isSuccess){
console.error(`Error putting ${extensionIDs[i]}`, putData);
}
}
console.log("done");
}
export async function setupStackForStage() {
try{
console.log("creating stack", DATABASE_NAME);
console.log("creating db ", await db.createDb(DATABASE_NAME));
// EXTENSIONS_DETAILS_TABLE
console.log("creating table ", await db.createTable(EXTENSIONS_DETAILS_TABLE));
console.log("creating Index ", await db.createIndex(EXTENSIONS_DETAILS_TABLE, FIELD_EXTENSION_ID, FIELD_TYPE,
true, true));
console.log("creating table ", await db.createTable(RELEASE_DETAILS_TABLE));
console.log("creating Index ", await db.createIndex(RELEASE_DETAILS_TABLE, FIELD_RELEASE_ID, FIELD_TYPE,
true, true));
console.log("reading registry file");
let registry = JSON.parse(await S3.getObject(EXTENSIONS_BUCKET, REGISTRY_FILE));
console.log("updating tables with registry");
await _putDataInTable(registry, EXTENSIONS_DETAILS_TABLE);
console.log("done");
return {
status: "done"
};
} catch (e){
console.error(e);
throw new Error("Oops, something went wrong");
}
}