-
Notifications
You must be signed in to change notification settings - Fork 1
/
modelCreation.js
87 lines (76 loc) · 3.74 KB
/
modelCreation.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
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
// Methods for writing files
const fileCreation = require('./fileCreation');
const templateEngine = require('./templateEngine');
/**
* Creates the models files, which represent tables on Sequelize
* @param {*} config
* @param {*} destinationFolder
*/
async function modelsCreation(config, destinationFolder) {
var fields = [];
var associations = [];
var authConfig = config['authConfig'];
// Loop through all models
var models = config['models'];
var modelsConfigs = [];
for (let i = 0; i < models.length; i++) {
// Get data
const model = models[i];
var fields = model['fields'].slice();
// Included models
var includedModels = [];
for (let j = 0; j < model['associations'].length; j++) {
const association = model['associations'][j];
if(association["include"]){
includedModels.push({ "modelName": association["model"] })
}
// Add all the belongsTo associations to fields
if(association["type"] === 'belongsTo') {
fields.push({ name: association['foreignKey'] });
}
}
var modelConfig = {
modelName: model['modelName'],
tableName: model['tableName'],
routeEndpoint: model['routeEndpoint'],
fields: model['fields'],
associations: model['associations'],
includedModels: includedModels,
auth: authConfig
}
modelsConfigs.push(modelConfig);
// Create the model
var templateModel = await templateEngine.templateCreation(__dirname + '/templates/models/model.js', modelConfig);
await fileCreation.writeFile(templateModel, destinationFolder + '/models/' + modelConfig.modelName + '.js');
console.log('[+] Created ' + modelConfig.modelName + ' model');
// Create the controller
modelConfig.fields = fields;
var templateController = await templateEngine.templateCreation(__dirname + '/templates/controllers/controller.js', modelConfig);
await fileCreation.writeFile(templateController, destinationFolder + '/controllers/' + modelConfig.modelName + '.js');
console.log('[+] Created ' + modelConfig.modelName + ' controller');
// Create the routes
var templateRoutes = await templateEngine.templateCreation(__dirname + '/templates/routes/route.js', modelConfig);
await fileCreation.writeFile(templateRoutes, destinationFolder + '/routes/' + modelConfig.modelName + '.js');
console.log('[+] Created ' + modelConfig.modelName + ' router');
}
// Create the controller index
var templateControllerIndex = await templateEngine.templateCreation(__dirname + '/templates/controllers/index.js', { models: modelsConfigs });
await fileCreation.writeFile(templateControllerIndex, destinationFolder + '/controllers/index.js');
console.log('[+] Created controllers/index.js');
// Create the routes index
var routeIndexConfig = {
models: modelsConfigs,
apiVersion: config['packageInfo']['version'],
auth: config['authConfig']
};
var templateRoutesIndex = await templateEngine.templateCreation(__dirname + '/templates/routes/index.js', routeIndexConfig);
await fileCreation.writeFile(templateRoutesIndex, destinationFolder + '/routes/index.js');
console.log('[+] Created routes/index.js');
var templateValues = await templateEngine.templateCreation(__dirname + '/templates/routes/values.js', routeIndexConfig);
await fileCreation.writeFile(templateValues, destinationFolder + '/routes/values.js');
console.log('[+] Created routes/values.js');
}
// Expose methods
module.exports = {
modelsCreation
};