zet-lib 1.5.30 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/lib/Modal.js +85 -30
  2. package/lib/Model.js +118 -2
  3. package/lib/config_generator.js +24 -0
  4. package/lib/generatorApi.js +1328 -0
  5. package/lib/generatorApp.js +1342 -0
  6. package/lib/generatorModel.js +733 -0
  7. package/lib/index.js +39 -12
  8. package/lib/lang_en.js +115 -0
  9. package/lib/routes/api.js +52 -0
  10. package/lib/routes/index.js +9 -0
  11. package/lib/views/error.ejs +3 -0
  12. package/lib/views/zgenerator/bootstrap3/_form.ejs +24 -0
  13. package/lib/views/zgenerator/bootstrap3/create.ejs +9 -0
  14. package/lib/views/zgenerator/bootstrap3/createjs.ejs +3 -0
  15. package/lib/views/zgenerator/bootstrap3/import.ejs +52 -0
  16. package/lib/views/zgenerator/bootstrap3/importjs.ejs +3 -0
  17. package/lib/views/zgenerator/bootstrap3/index.ejs +29 -0
  18. package/lib/views/zgenerator/bootstrap3/indexcss.ejs +1 -0
  19. package/lib/views/zgenerator/bootstrap3/indexjs.ejs +307 -0
  20. package/lib/views/zgenerator/bootstrap3/update.ejs +8 -0
  21. package/lib/views/zgenerator/bootstrap3/updatejs.ejs +3 -0
  22. package/lib/views/zgenerator/bootstrap3/view.ejs +57 -0
  23. package/lib/views/zgenerator/head.ejs +12 -0
  24. package/lib/views/zgenerator/index.ejs +271 -0
  25. package/lib/views/zgenerator/indexcss.ejs +87 -0
  26. package/lib/views/zgenerator/indexjs.ejs +705 -0
  27. package/lib/views/zgenerator/layout.ejs +198 -0
  28. package/lib/views/zgenerator/manual_basic.ejs +2 -0
  29. package/lib/views/zgenerator/manual_dropdown.ejs +126 -0
  30. package/lib/views/zgenerator/manual_modules.ejs +192 -0
  31. package/lib/views/zgenerator/manual_virtual.ejs +143 -0
  32. package/lib/views/zgenerator/mini.ejs +341 -0
  33. package/lib/views/zgenerator/routerApp.ejs +359 -0
  34. package/lib/views/zgenerator/views/_form.ejs +25 -0
  35. package/lib/views/zgenerator/views/approval.ejs +42 -0
  36. package/lib/views/zgenerator/views/create.ejs +7 -0
  37. package/lib/views/zgenerator/views/createjs.ejs +16 -0
  38. package/lib/views/zgenerator/views/import.ejs +49 -0
  39. package/lib/views/zgenerator/views/importjs.ejs +4 -0
  40. package/lib/views/zgenerator/views/index.ejs +9 -0
  41. package/lib/views/zgenerator/views/indexcss.ejs +2 -0
  42. package/lib/views/zgenerator/views/indexjs.ejs +2 -0
  43. package/lib/views/zgenerator/views/preview.ejs +34 -0
  44. package/lib/views/zgenerator/views/update.ejs +7 -0
  45. package/lib/views/zgenerator/views/updatejs.ejs +16 -0
  46. package/lib/views/zgenerator/views/view.ejs +36 -0
  47. package/lib/zGeneratorRouter.js +46 -22
  48. package/lib/zRoute.js +14 -3
  49. package/package.json +17 -11
@@ -0,0 +1,733 @@
1
+ /**
2
+ * Created by sintret dev on 10/1/2021.
3
+ */
4
+ const configGenerator = require("./config_generator");
5
+ const Model = require("./Model");
6
+ const fs = require("fs-extra");
7
+ const connection = require('./connection');
8
+ const Util = require('./Util');
9
+ const zRoute = require('./zRoute');
10
+
11
+ const me = {};
12
+ let defaultValues = {};
13
+
14
+ me.prepare = (MYMODEL) => {
15
+ const left = MYMODEL.left || [];
16
+ const right = MYMODEL.right || [];
17
+ const properties = MYMODEL.properties || {};
18
+ let details = MYMODEL.details || {};
19
+ let labels = MYMODEL.labels || {};
20
+
21
+ //remove custom type
22
+ let customs = [];
23
+ let visibles = [];
24
+ let visiblesArr = [];
25
+ let visiblesObj = {}
26
+ for (let key in properties) {
27
+ let propKey = properties[key].values
28
+ if (
29
+ Object.prototype.hasOwnProperty.call(
30
+ properties[key].values,
31
+ "defaultValue"
32
+ ) &&
33
+ properties[key].values.defaultValue
34
+ ) {
35
+ defaultValues[key] = properties[key].values.defaultValue;
36
+ }
37
+ if (properties[key].type == "custom") {
38
+ customs.push(key);
39
+ }
40
+ if (propKey.visibles ==1) {
41
+ visibles.push(key)
42
+ visiblesArr.push({key:key, value: +propKey.no_visible});
43
+ visiblesObj[key] = +propKey.no_visible
44
+ }
45
+ }
46
+ if (customs.length) {
47
+ customs.map((item) => {
48
+ for (var key in MYMODEL.details) {
49
+ details[key] = MYMODEL.details[key].filter((d) => !customs.includes(d));
50
+ }
51
+ delete labels[item];
52
+ });
53
+ }
54
+
55
+ const datas = {};
56
+ const obj = {};
57
+ obj.table = MYMODEL.table;
58
+ obj.routeName = MYMODEL.route;
59
+ obj.title = MYMODEL.name;
60
+ obj.hasTabs =
61
+ Object.prototype.hasOwnProperty.call(MYMODEL, "tabs") &&
62
+ MYMODEL.tabs &&
63
+ MYMODEL.tabs.length > 0
64
+ ? true
65
+ : false;
66
+ obj.tabs = MYMODEL.tabs || [];
67
+ obj.tabsDetail = details || {};
68
+ obj.keys = Object.keys(labels).filter((item) => !customs.includes(item));
69
+ obj.keysExcel = obj.keys;
70
+ obj.labels = labels;
71
+ obj.labels.no = "#";
72
+ obj.labels.actionColumn = "Action";
73
+ obj.fields = me.fields(MYMODEL);
74
+ obj.options = {};
75
+ obj.hasApproval =
76
+ MYMODEL.hasOwnProperty("is_approval") && MYMODEL.is_approval ? true : false;
77
+
78
+ for (let key in obj.fields) {
79
+ obj.options[key] = obj.fields[key].search;
80
+ datas[key] = defaultValues[key] == "null" ? "" : defaultValues[key] || "";
81
+ }
82
+
83
+ obj.grids = {
84
+ visibles: ["no"],
85
+ invisibles: [],
86
+ };
87
+ //old visibles
88
+ if(visibles.length == 0){
89
+ left.forEach(function (item) {
90
+ if (typeof item == "object") {
91
+ for (const key in item) {
92
+ visibles = [...visibles, ...item[key]];
93
+ }
94
+ } else {
95
+ visibles.push(item);
96
+ }
97
+ });
98
+ if (visibles.length < 4) {
99
+ right.forEach(function (item) {
100
+ if (typeof item == "object") {
101
+ for (const key in item) {
102
+ visibles = [...visibles, ...item[key]];
103
+ }
104
+ } else {
105
+ visibles.push(item);
106
+ }
107
+ });
108
+ }
109
+ if (visibles.length == 0) {
110
+ let num = 1;
111
+ let nots = Util.nots;
112
+ nots.push("no");
113
+ for (let key in labels) {
114
+ if (!Util.in_array(key, nots)) {
115
+ if (num < 6) {
116
+ visibles.push(key);
117
+ }
118
+ num++;
119
+ }
120
+ }
121
+ }
122
+ obj.grids.visibles = [
123
+ ...["no"],
124
+ ...visibles.filter((item, index) => {
125
+ return index < 6;
126
+ }),
127
+ ...["actionColumn"],
128
+ ];
129
+
130
+ } else {
131
+ //new visibles
132
+ console.log(visiblesArr)
133
+ let sortVisibles = Util.sortArray(visiblesArr, "value")
134
+ visibles = sortVisibles.map((item) => item.key)
135
+ console.log(visibles)
136
+ obj.grids.visibles = [
137
+ ...["no"],
138
+ ...visibles,
139
+ ...["actionColumn"],
140
+ ];
141
+ }
142
+
143
+ obj.grids.invisibles = Object.keys(labels).filter((item) => {
144
+ return !obj.grids.visibles.includes(item);
145
+ });
146
+
147
+ obj.datas = datas;
148
+
149
+ //define what are widgets
150
+ //except text,textarea,
151
+ //var nots = ['text','textarea'];
152
+ const widgets = {};
153
+ const labelsArray = Object.keys(obj.fields);
154
+
155
+ widgets["id"] = {
156
+ name: "integer",
157
+ hidden: false,
158
+ };
159
+ if (Util.in_array("lock", labelsArray)) {
160
+ widgets["lock"] = {
161
+ name: "switch",
162
+ hidden: true,
163
+ hasInputGroup: false,
164
+ required: false,
165
+ float: false,
166
+ inline: false,
167
+ readonly: false,
168
+ fields: ["Unlock", "Locked"],
169
+ };
170
+ }
171
+ if (Util.in_array("approval_status", labelsArray)) {
172
+ widgets["approval_status"] = {
173
+ name: "select",
174
+ title: "Approval Status",
175
+ placeholder: "Approval Status",
176
+ type: "select",
177
+ category: "integer",
178
+ length: "",
179
+ required: false,
180
+ search: "=",
181
+ key: "",
182
+ hidden: false,
183
+ hasInputGroup: false,
184
+ float: false,
185
+ inline: false,
186
+ readonly: false,
187
+ fields: {
188
+ 1: "New",
189
+ 2: "Check",
190
+ 11: "Approve 1",
191
+ 12: "Approve 2",
192
+ 13: "Approve 3",
193
+ 14: "Approve 4",
194
+ 15: "Approve 5",
195
+ 16: "Approve 6",
196
+ 17: "Approve 7",
197
+ 18: "Approve 8",
198
+ 19: "Approve 9",
199
+ 20: "Approve 10",
200
+ 21: "Final Approve",
201
+ 22: "Reject",
202
+ },
203
+ array: [
204
+ { value: "1", label: "New" },
205
+ { value: "2", label: "Check" },
206
+ { value: "11", label: "Approve 1" },
207
+ { value: "12", label: "Approve 2" },
208
+ { value: "13", label: "Approve 3" },
209
+ { value: "14", label: "Approve 4" },
210
+ { value: "15", label: "Approve 5" },
211
+ { value: "16", label: "Approve 6" },
212
+ { value: "17", label: "Approve 7" },
213
+ { value: "18", label: "Approve 8" },
214
+ { value: "19", label: "Approve 9" },
215
+ { value: "20", label: "Approve 10" },
216
+ { value: "21", label: "Final Approve" },
217
+ { value: "22", label: "Reject" },
218
+ ],
219
+ please_select: "",
220
+ };
221
+ }
222
+ if (Util.in_array("approval_history", labelsArray)) {
223
+ widgets["approval_history"] = {
224
+ name: "json_array",
225
+ hidden: false,
226
+ hasInputGroup: false,
227
+ required: false,
228
+ float: false,
229
+ inline: false,
230
+ readonly: false,
231
+ };
232
+ }
233
+ if (Util.in_array("created_at", labelsArray)) {
234
+ widgets["created_at"] = {
235
+ name: "datetime",
236
+ hidden: true,
237
+ };
238
+ }
239
+ if (Util.in_array("updated_at", labelsArray)) {
240
+ widgets["updated_at"] = {
241
+ name: "datetime",
242
+ hidden: true,
243
+ };
244
+ }
245
+ if (Util.in_array("created_by", labelsArray)) {
246
+ widgets["created_by"] = {
247
+ name: "relation",
248
+ table: "zuser",
249
+ fields: ["id", "fullname"],
250
+ hidden: true,
251
+ };
252
+ }
253
+ if (Util.in_array("updated_by", labelsArray)) {
254
+ widgets["updated_by"] = {
255
+ name: "relation",
256
+ table: "zuser",
257
+ fields: ["id", "fullname"],
258
+ hidden: true,
259
+ };
260
+ }
261
+
262
+ for (const key in properties) {
263
+ const property = properties[key];
264
+ const hidden = !property.values.hidden
265
+ ? false
266
+ : property.values.hidden == "on"
267
+ ? true
268
+ : false;
269
+ /* console.log("property start")
270
+ console.log(key)
271
+ console.log(JSON.stringify(property))
272
+ console.log("property end")*/
273
+ const type = property.type;
274
+ widgets[key] = {
275
+ name: type,
276
+ hidden: hidden,
277
+ };
278
+
279
+ widgets[key].hasInputGroup = false;
280
+ if (
281
+ Object.prototype.hasOwnProperty.call(property.values, "inputGroupLeft") &&
282
+ property.values.inputGroupLeft
283
+ ) {
284
+ widgets[key].inputGroupLeft = property.values.inputGroupLeft;
285
+ widgets[key].hasInputGroup = true;
286
+ }
287
+ if (
288
+ Object.prototype.hasOwnProperty.call(
289
+ property.values,
290
+ "inputGroupRight"
291
+ ) &&
292
+ property.values.inputGroupRight
293
+ ) {
294
+ widgets[key].inputGroupRight = property.values.inputGroupRight;
295
+ widgets[key].hasInputGroup = true;
296
+ }
297
+
298
+ if (property.values.information) {
299
+ widgets[key].information = JSON.stringify(property.values.information);
300
+ }
301
+
302
+ if (property.values.digitDecimal) {
303
+ widgets[key].digitDecimal = property.values.digitDecimal;
304
+ }
305
+
306
+ if (property.values.thousandSeparator) {
307
+ widgets[key].thousandSeparator = property.values.thousandSeparator;
308
+ }
309
+
310
+ if (property.values.decimalPlaces) {
311
+ widgets[key].decimalPlaces = property.values.decimalPlaces;
312
+ }
313
+
314
+ if (property.values.defaultValue) {
315
+ widgets[key].defaultValue = property.values.defaultValue;
316
+ }
317
+
318
+ if (Object.prototype.hasOwnProperty.call(property.values, "required")) {
319
+ widgets[key].required = property.values.required;
320
+ }
321
+
322
+ widgets[key].float = false;
323
+ if (Object.prototype.hasOwnProperty.call(property.values, "float")) {
324
+ widgets[key].float = property.values.float ? true : false;
325
+ }
326
+
327
+ widgets[key].inline = false;
328
+ if (Object.prototype.hasOwnProperty.call(property.values, "inline")) {
329
+ widgets[key].inline = property.values.inline ? true : false;
330
+ }
331
+
332
+ widgets[key].readonly = false;
333
+ if (Object.prototype.hasOwnProperty.call(property.values, "readonly")) {
334
+ widgets[key].readonly = property.values.readonly ? true : false;
335
+ }
336
+
337
+ switch (type) {
338
+ case "image":
339
+ widgets[key].width = property.values.width || "300";
340
+ break;
341
+ case "datepicker":
342
+ widgets[key].format = !property.values.format
343
+ ? "YYYY-MM-DD"
344
+ : property.values.format;
345
+ break;
346
+ case "datetime":
347
+ widgets[key].format = !property.values.format
348
+ ? "YYYY-MM-DD HH:mm:ss"
349
+ : property.values.format;
350
+ break;
351
+ case "switch":
352
+ widgets[key].fields = [
353
+ property.values.notactive,
354
+ property.values.active,
355
+ ];
356
+ break;
357
+ case "table":
358
+ widgets[key].table = property.values.table;
359
+ widgets[key].hasCompanyId = true;
360
+ widgets[key].search = property.values.search;
361
+ break;
362
+ case "multi_line_editor":
363
+ widgets[key].table = property.values.table;
364
+ widgets[key].fields = property.values.fields;
365
+ widgets[key].description = property.values.description;
366
+ widgets[key].hasCompanyId = true;
367
+ break;
368
+ case "select":
369
+ var values = property.values.select || [];
370
+ widgets[key].fields = values.reduce((result, item) => {
371
+ return { ...result, [item.value]: item.label };
372
+ }, {});
373
+ widgets[key].array = values;
374
+ widgets[key].please_select = property.values.please_select;
375
+ break;
376
+ case "radio":
377
+ var values = property.values.select || [];
378
+ widgets[key].fields = values.reduce((result, item) => {
379
+ return { ...result, [item.value]: item.label };
380
+ }, {});
381
+ widgets[key].array = values;
382
+ break;
383
+ case "relation":
384
+ widgets[key].table = property.values.table;
385
+ widgets[key].fields = ["id", property.values.concat];
386
+ widgets[key].isChain = property.values.isChain;
387
+ widgets[key].isAttributes = property.values.isAttributes ? true : false;
388
+ widgets[key].isSearch = property.values.isSearch ? true : false;
389
+ widgets[key].chains = property.values.chains || [];
390
+ //widgets[key].chainsTable = property.values.chainsTable || {};
391
+ widgets[key].hasCompanyId = true;
392
+ widgets[key].please_select = property.values.please_select;
393
+ widgets[key].order_by = property.values.order_by;
394
+ widgets[key].import_field = property.values.import_field || "id";
395
+ break;
396
+ case "dragdrop":
397
+ widgets[key].table = property.values.table;
398
+ widgets[key].fields = ["id", property.values.concat];
399
+ widgets[key].where = property.values.where || "";
400
+ widgets[key].left = property.values.left || "";
401
+ widgets[key].right = property.values.right || "";
402
+ widgets[key].hasCompanyId = true;
403
+ widgets[key].import_field = property.values.import_field || "id";
404
+ break;
405
+ case "typeahead":
406
+ widgets[key].table = property.values.table;
407
+ widgets[key].fields = ["id", property.values.concat];
408
+ widgets[key].hasCompanyId = true;
409
+ widgets[key].order_by = property.values.order_by;
410
+ widgets[key].import_field = property.values.import_field || "id";
411
+ break;
412
+ case "dropdown_multi":
413
+ widgets[key].table = property.values.table;
414
+ widgets[key].fields = ["id", property.values.concat];
415
+ widgets[key].hasChains = property.values.chains ? true : false;
416
+ widgets[key].hasCompanyId = true;
417
+ widgets[key].order_by = property.values.order_by;
418
+ widgets[key].import_field = property.values.import_field || "id";
419
+ break;
420
+ case "dropdown_chain":
421
+ var fieldValue = property.values.field || "";
422
+ widgets[key].table = property.values.table;
423
+ widgets[key].fields = ["id", property.values.concat];
424
+ widgets[key].chains =
425
+ fieldValue.indexOf(",") > -1 ? fieldValue.split(",") : [fieldValue];
426
+ widgets[key].hasCompanyId = true;
427
+ break;
428
+ case "dropdown_checkbox":
429
+ var fieldValue = property.values.array || "";
430
+ widgets[key].fields = fieldValue.indexOf(",")
431
+ ? fieldValue.split(",").map((item) => {
432
+ return item.trim();
433
+ })
434
+ : [fieldValue.trim()];
435
+ break;
436
+ case "virtual":
437
+ var fieldValue = property.values.sql || "";
438
+ widgets[key].fields = property.values.sql || "";
439
+ break;
440
+ case "location":
441
+ widgets[key].height = property.values.height || 250;
442
+ break;
443
+ case "custom":
444
+ widgets[key].fields = property.values.code || "";
445
+ break;
446
+ case "ide_editor":
447
+ widgets[key].language = property.values.languages || "";
448
+ widgets[key].height = !property.values.height
449
+ ? 400
450
+ : property.values.height;
451
+ break;
452
+
453
+ default:
454
+ break;
455
+ }
456
+ }
457
+ obj.widgets = widgets;
458
+
459
+ return obj;
460
+ };
461
+
462
+ me.build = (json, index = 0) => {
463
+ return zRoute.buildFileModel(json, index);
464
+ };
465
+
466
+ me.create = async (ZFIELDS) => {
467
+ let jsonText = `module.exports = {${Util.newLine}`;
468
+
469
+ //CHECK IF HAS multi_line_editor
470
+ var properties = ZFIELDS.properties || {};
471
+ var labels = ZFIELDS.labels || {};
472
+ var multi_line_editors = [];
473
+ for (var key in properties) {
474
+ if (properties[key].type == "multi_line_editor") {
475
+ multi_line_editors.push(key);
476
+ }
477
+ }
478
+
479
+ //join into MYMODEL [JSON_MODEL]
480
+ if (multi_line_editors.length) {
481
+ // multi line editor skip
482
+ /*for(var i = 0; i < multi_line_editors.length;i++) {
483
+ var item = multi_line_editors[i];
484
+ var table = properties[item].table;
485
+ var ZFIELDS_OTHER = await connection.result({
486
+ table:"zfields",
487
+ where:{table:table}
488
+ })
489
+ console.log("ZFIELDS_OTHER")
490
+ console.log(ZFIELDS_OTHER)
491
+
492
+ var JSON_MODEL_OTHER = me.prepare(ZFIELDS_OTHER);
493
+ }*/
494
+ }
495
+ const JSON_MODEL = me.prepare(ZFIELDS);
496
+ jsonText += me.build(JSON_MODEL);
497
+ jsonText += `}`;
498
+ const filename = `${dirRoot}/models/${ZFIELDS.table}.js`;
499
+ fs.writeFile(filename, jsonText, function (err) {
500
+ if (err) {
501
+ return console.log(err.toString());
502
+ }
503
+ console.log("The file models of " + ZFIELDS.table + " is saved!");
504
+ });
505
+
506
+ return await me.build_sql(ZFIELDS);
507
+ };
508
+
509
+ /*
510
+ Create for API
511
+ */
512
+ me.createApi = async (columns, constraintList, ZFIELDS) => {
513
+ let jsonText = `module.exports = {${Util.newLine}`;
514
+
515
+ //CHECK IF HAS multi_line_editor
516
+ const properties = ZFIELDS.properties || {};
517
+ const labels = ZFIELDS.labels || {};
518
+ const multi_line_editors = [];
519
+ for (const key in properties) {
520
+ if (properties[key].type == "multi_line_editor") {
521
+ multi_line_editors.push(key);
522
+ }
523
+ }
524
+ //join into MYMODEL [JSON_MODEL]
525
+ const JSON_MODEL = me.prepare(ZFIELDS);
526
+ jsonText += me.build(JSON_MODEL);
527
+ jsonText += `}`;
528
+ const filename = `${ZFIELDS.table}.js`;
529
+ const datas = me.build_sql_api(columns, constraintList, ZFIELDS);
530
+ datas.content = jsonText;
531
+ datas.filename = filename;
532
+ datas.modelObj = JSON_MODEL;
533
+ return datas;
534
+ };
535
+
536
+ me.build_sql_api = (columns, constraintList, MYMODEL) => {
537
+ const labels = MYMODEL.labels || {};
538
+ let properties = MYMODEL.properties || {};
539
+ const fields = columns.reduce((result, item) => {
540
+ return [...result, item.Field];
541
+ }, []);
542
+ const sql = [];
543
+ let error = "";
544
+ const datas = {
545
+ error: error,
546
+ };
547
+
548
+ for (let key in labels) {
549
+ if (!Util.in_array(key, fields)) {
550
+ let property = properties[key];
551
+ if (property) {
552
+ let sqlObject = Model[property.type].sql(key, MYMODEL, property.values);
553
+ if (sqlObject.column) {
554
+ try {
555
+ sql.push(sqlObject.column);
556
+ } catch (err) {
557
+ error += err.toString();
558
+ }
559
+ }
560
+ }
561
+ }
562
+ }
563
+
564
+ //var constraintList = await connection.query(connection.constraintList(MYMODEL.table));
565
+ //make a object instead of array
566
+ const constraintObject = Util.arrayToObject(constraintList, "conname");
567
+
568
+ const alter = [];
569
+ const index = [];
570
+ const defaultValue = [];
571
+ const fk = [];
572
+ const notAlters = ["virtual", "custom"];
573
+ for (const key in properties) {
574
+ const property = properties[key];
575
+ if (!notAlters.includes(property.type)) {
576
+ //required
577
+ const required = properties[key].values.required ? true : false;
578
+ if (required) {
579
+ alter.push(
580
+ `ALTER TABLE "${MYMODEL.table}" ALTER COLUMN "${key}" SET NOT NULL; `
581
+ );
582
+ } else {
583
+ alter.push(
584
+ `ALTER TABLE "${MYMODEL.table}" ALTER COLUMN "${key}" DROP NOT NULL; `
585
+ );
586
+ }
587
+ const sqlObject = Model[property.type].sql(key, MYMODEL, property.values);
588
+ //unique
589
+ const unique = properties[key].values.unique ? true : false;
590
+ const idx = `unique_${MYMODEL.table}_${key}`;
591
+ if (sqlObject.index) {
592
+ if (!constraintObject.hasOwnProperty(idx)) {
593
+ //await connection.query(sqlObject.index);
594
+ index.push(sqlObject.index);
595
+ }
596
+ } else {
597
+ if (constraintObject.hasOwnProperty(idx)) {
598
+ //await connection.query(`DROP INDEX ${idx}; `);
599
+ index.push(`DROP INDEX ${idx}; `);
600
+ }
601
+ }
602
+ //relations foreign key
603
+ const fkx = `fk_${MYMODEL.table}_${key}`;
604
+ if (sqlObject.foreignKey) {
605
+ if (!constraintObject.hasOwnProperty(fkx)) {
606
+ //await connection.query(sqlObject.foreignKey);
607
+ fk.push(sqlObject.foreignKey);
608
+ }
609
+ }
610
+ //default value
611
+ if (sqlObject.defaultValue) {
612
+ //await connection.query(sqlObject.defaultValue);
613
+ defaultValue.push(sqlObject.defaultValue);
614
+ }
615
+ }
616
+ }
617
+
618
+ datas.sql = sql;
619
+ datas.fk = fk;
620
+ datas.alter = alter;
621
+ datas.defaultValue = defaultValue;
622
+ datas.index = index;
623
+ return datas;
624
+ };
625
+
626
+ me.fields = (MYMODEL) => {
627
+ const obj = {};
628
+ const properties = MYMODEL.properties || {};
629
+ const labels = MYMODEL.labels || {};
630
+ for (const key in labels) {
631
+ obj[key] = {
632
+ name: key,
633
+ title: labels[key],
634
+ placeholder: labels[key],
635
+ };
636
+ if (key == "id") {
637
+ Object.assign(obj[key], me.integer({ key: "PRI" }));
638
+ } else if (key == "company_id") {
639
+ Object.assign(obj[key], me.integer({ key: "MUL" }));
640
+ } else if (key == "lock") {
641
+ Object.assign(obj[key], me.lock());
642
+ } else if (key == "approval_status") {
643
+ Object.assign(obj[key], me.approval_status());
644
+ } else if (key == "approval_history") {
645
+ Object.assign(obj[key], me.approval_history());
646
+ } else if (Util.in_array(key, configGenerator.createdUpdatedAt)) {
647
+ Object.assign(obj[key], me.datetime());
648
+ } else if (Util.in_array(key, configGenerator.createdUpdatedBy)) {
649
+ Object.assign(obj[key], me.integer());
650
+ } else {
651
+ if (properties.hasOwnProperty(key)) {
652
+ var property = properties[key];
653
+ var type = property.type;
654
+ //console.log(type)
655
+ obj[key].type = Model[type].columnType(property.values);
656
+ obj[key].category = Model[type].category;
657
+ obj[key].length = !property.length ? "" : property.length;
658
+ obj[key].required = property.values.required ? true : false;
659
+ obj[key].search = obj[key].category == "integer" ? "=" : "ILIKE";
660
+ obj[key].key = "";
661
+ }
662
+ }
663
+ }
664
+
665
+ return obj;
666
+ };
667
+
668
+ me.integer = (obj = {}) => {
669
+ var defaultObj = {
670
+ type: "int",
671
+ category: "integer",
672
+ length: 11,
673
+ required: true,
674
+ search: "=",
675
+ key: "",
676
+ };
677
+
678
+ return Object.assign(defaultObj, obj);
679
+ };
680
+
681
+ me.datetime = (obj = {}) => {
682
+ var defaultObj = {
683
+ type: "datetime",
684
+ category: "datetime",
685
+ length: "",
686
+ required: false,
687
+ search: "ILIKE",
688
+ key: "",
689
+ };
690
+
691
+ return Object.assign(defaultObj, obj);
692
+ };
693
+
694
+ me.lock = (obj = {}) => {
695
+ var defaultObj = {
696
+ type: "int",
697
+ category: "integer",
698
+ length: "1",
699
+ required: false,
700
+ search: "=",
701
+ key: "",
702
+ };
703
+
704
+ return Object.assign(defaultObj, obj);
705
+ };
706
+
707
+ me.approval_status = (obj = {}) => {
708
+ var defaultObj = {
709
+ type: "select",
710
+ category: "integer",
711
+ length: "",
712
+ required: false,
713
+ search: "=",
714
+ key: "",
715
+ };
716
+
717
+ return Object.assign(defaultObj, obj);
718
+ };
719
+
720
+ me.approval_history = (obj = {}) => {
721
+ var defaultObj = {
722
+ type: "json_array",
723
+ category: "array",
724
+ length: "2",
725
+ required: false,
726
+ search: "=",
727
+ key: "",
728
+ };
729
+
730
+ return Object.assign(defaultObj, obj);
731
+ };
732
+
733
+ module.exports = me;