db-model-router 1.0.0
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.
- package/.env +7 -0
- package/LICENSE +201 -0
- package/README.md +505 -0
- package/docker-compose.yml +141 -0
- package/docs/README.md +208 -0
- package/docs/SKILL.md +202 -0
- package/docs/adapters/cockroachdb.md +49 -0
- package/docs/adapters/dynamodb.md +53 -0
- package/docs/adapters/mongodb.md +56 -0
- package/docs/adapters/mssql.md +55 -0
- package/docs/adapters/oracle.md +52 -0
- package/docs/adapters/postgres.md +50 -0
- package/docs/adapters/redis.md +53 -0
- package/docs/adapters/sqlite3.md +43 -0
- package/package.json +109 -0
- package/src/cli/generate-app.js +359 -0
- package/src/cli/generate-model.js +760 -0
- package/src/cli/generate-openapi.js +237 -0
- package/src/cli/generate-route.js +346 -0
- package/src/cockroachdb/db.js +563 -0
- package/src/commons/function.js +165 -0
- package/src/commons/model.js +444 -0
- package/src/commons/route.js +214 -0
- package/src/commons/validator.js +172 -0
- package/src/dynamodb/db.js +552 -0
- package/src/index.js +57 -0
- package/src/mongodb/db.js +381 -0
- package/src/mssql/db.js +461 -0
- package/src/mysql/db.js +527 -0
- package/src/oracle/db.js +855 -0
- package/src/oracle/sql_translator.js +406 -0
- package/src/postgres/db.js +666 -0
- package/src/postgres/ddl_translator.js +69 -0
- package/src/postgres/sql_translator.js +396 -0
- package/src/redis/db.js +448 -0
- package/src/serve.js +90 -0
- package/src/sqlite3/db.js +346 -0
package/src/mysql/db.js
ADDED
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
const mysql = require("mysql2");
|
|
2
|
+
const { jsonSafeParse } = require("../commons/function");
|
|
3
|
+
let pool = null;
|
|
4
|
+
const WHERE_INVALID = "Invalid filter object";
|
|
5
|
+
|
|
6
|
+
function connect(credentails) {
|
|
7
|
+
pool = mysql.createPool(credentails);
|
|
8
|
+
return pool;
|
|
9
|
+
}
|
|
10
|
+
function query(sql, parameter = []) {
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
pool.query(sql, parameter, function (error, results) {
|
|
13
|
+
if (error) {
|
|
14
|
+
reject(error);
|
|
15
|
+
}
|
|
16
|
+
resolve(results);
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function sort_builder(sort) {
|
|
22
|
+
if (sort.length < 1) {
|
|
23
|
+
return {
|
|
24
|
+
query: "",
|
|
25
|
+
value: [],
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
let query_item = [];
|
|
29
|
+
let value = [];
|
|
30
|
+
for (const item of sort) {
|
|
31
|
+
if (item[0] === "-") {
|
|
32
|
+
query_item.push("?? DESC");
|
|
33
|
+
value.push(item.replace("-", ""));
|
|
34
|
+
} else {
|
|
35
|
+
query_item.push("?? ASC");
|
|
36
|
+
value.push(item);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
let query = "ORDER BY " + query_item.join(",");
|
|
40
|
+
return {
|
|
41
|
+
query,
|
|
42
|
+
value,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function where(filter, safeDelete = null) {
|
|
46
|
+
if (filter !== null && filter !== "" && !Array.isArray(filter)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
if (
|
|
51
|
+
filter === null ||
|
|
52
|
+
filter === "" ||
|
|
53
|
+
filter.length === 0 ||
|
|
54
|
+
(Array.isArray(filter[0]) && filter[0].length === 0) ||
|
|
55
|
+
(Array.isArray(filter[0]) &&
|
|
56
|
+
Array.isArray(filter[0][0]) &&
|
|
57
|
+
filter[0][0].length === 0)
|
|
58
|
+
) {
|
|
59
|
+
if (safeDelete === null) {
|
|
60
|
+
return {
|
|
61
|
+
query: "",
|
|
62
|
+
value: [],
|
|
63
|
+
};
|
|
64
|
+
} else {
|
|
65
|
+
filter = [[]];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
} catch (err) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (safeDelete !== null) {
|
|
73
|
+
for (const filterItem of filter) {
|
|
74
|
+
filterItem.push([safeDelete, "=", 0]);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const valid_conditionals = [
|
|
78
|
+
"=",
|
|
79
|
+
"like",
|
|
80
|
+
"not like",
|
|
81
|
+
"in",
|
|
82
|
+
"not in",
|
|
83
|
+
"<",
|
|
84
|
+
">",
|
|
85
|
+
"<=",
|
|
86
|
+
">=",
|
|
87
|
+
"!=",
|
|
88
|
+
];
|
|
89
|
+
let conditionOr = [];
|
|
90
|
+
let value = [];
|
|
91
|
+
for (const i of filter) {
|
|
92
|
+
let conditionAnd = [];
|
|
93
|
+
for (const j of i) {
|
|
94
|
+
if (!valid_conditionals.includes(j[1])) {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
if ((j[1] === "in" || j[1] === "not in") && !Array.isArray(j[2])) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
if (j[1] === "in" || j[1] === "not in") {
|
|
101
|
+
conditionAnd.push("?? " + j[1] + " " + arrayParam(j[2].length) + "");
|
|
102
|
+
value.push(j[0], ...j[2]);
|
|
103
|
+
} else if (j[1] === "like" || j[1] === "not like") {
|
|
104
|
+
conditionAnd.push("?? " + j[1] + " ?");
|
|
105
|
+
value.push(j[0], "%" + j[2] + "%");
|
|
106
|
+
} else {
|
|
107
|
+
conditionAnd.push("?? " + j[1] + " ?");
|
|
108
|
+
value.push(j[0], j[2]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
conditionOr.push(conditionAnd.join(" AND "));
|
|
112
|
+
}
|
|
113
|
+
let query = "WHERE ((" + conditionOr.join(") OR (") + "))";
|
|
114
|
+
return {
|
|
115
|
+
query,
|
|
116
|
+
value,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function get(table, filter = [], sort = [], safeDelete = null) {
|
|
120
|
+
const response = {};
|
|
121
|
+
return new Promise((resolve, reject) => {
|
|
122
|
+
if (safeDelete !== null) {
|
|
123
|
+
for (const filterItem of filter) {
|
|
124
|
+
filterItem.push([safeDelete, "=", 0]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
const whereData = where(filter, safeDelete);
|
|
128
|
+
const sortData = sort_builder(sort);
|
|
129
|
+
const statement = `SELECT * FROM ?? ${whereData["query"]} ${sortData["query"]};`;
|
|
130
|
+
pool.query(
|
|
131
|
+
statement,
|
|
132
|
+
[table, ...whereData["value"], ...sortData["value"]],
|
|
133
|
+
function (error, results) {
|
|
134
|
+
if (error) {
|
|
135
|
+
reject({ message: error.sqlMessage });
|
|
136
|
+
}
|
|
137
|
+
response["data"] = jsonSafeParse(results);
|
|
138
|
+
response["count"] = qcount(table, filter, safeDelete).then((count) => {
|
|
139
|
+
response["count"] = count;
|
|
140
|
+
resolve(response);
|
|
141
|
+
});
|
|
142
|
+
},
|
|
143
|
+
);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function list(
|
|
148
|
+
table,
|
|
149
|
+
filter = [],
|
|
150
|
+
sort = [],
|
|
151
|
+
safeDelete = null,
|
|
152
|
+
page = 0,
|
|
153
|
+
limit = 30,
|
|
154
|
+
) {
|
|
155
|
+
const response = {};
|
|
156
|
+
return new Promise((resolve, reject) => {
|
|
157
|
+
const whereData = where(filter, safeDelete);
|
|
158
|
+
const sortData = sort_builder(sort);
|
|
159
|
+
if (whereData == null) {
|
|
160
|
+
reject({ message: WHERE_INVALID });
|
|
161
|
+
}
|
|
162
|
+
const statement = `SELECT * FROM ?? ${whereData["query"]} ${sortData["query"]} LIMIT ? OFFSET ?;`;
|
|
163
|
+
pool.query(
|
|
164
|
+
statement,
|
|
165
|
+
[table, ...whereData["value"], ...sortData["value"], limit, page * limit],
|
|
166
|
+
function (error, results) {
|
|
167
|
+
if (error) {
|
|
168
|
+
reject({ message: error.sqlMessage });
|
|
169
|
+
}
|
|
170
|
+
response["data"] = jsonSafeParse(results);
|
|
171
|
+
response["count"] = qcount(table, filter, safeDelete).then((count) => {
|
|
172
|
+
response["count"] = count;
|
|
173
|
+
resolve(response);
|
|
174
|
+
});
|
|
175
|
+
},
|
|
176
|
+
);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
function qcount(table, filter, safeDelete = null) {
|
|
181
|
+
return new Promise((resolve) => {
|
|
182
|
+
const whereData = where(filter, safeDelete);
|
|
183
|
+
if (whereData == null) {
|
|
184
|
+
reject({ message: WHERE_INVALID });
|
|
185
|
+
}
|
|
186
|
+
const statement = `SELECT count(*) AS number FROM ?? ${whereData["query"]};`;
|
|
187
|
+
pool.query(
|
|
188
|
+
statement,
|
|
189
|
+
[table, ...whereData["value"]],
|
|
190
|
+
function (error, results) {
|
|
191
|
+
if (error || results === "undefined") {
|
|
192
|
+
resolve(0);
|
|
193
|
+
} else {
|
|
194
|
+
resolve(results[0].number);
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function remove(table, filter, safeDelete = null) {
|
|
202
|
+
return new Promise((resolve, reject) => {
|
|
203
|
+
const whereData = where(filter);
|
|
204
|
+
if (whereData == null) {
|
|
205
|
+
reject({ message: WHERE_INVALID });
|
|
206
|
+
}
|
|
207
|
+
if (whereData.value.length < 1) {
|
|
208
|
+
reject({ status: "unable to remove as there is not filter attributes" });
|
|
209
|
+
} else {
|
|
210
|
+
let statement = "";
|
|
211
|
+
if (safeDelete != null) {
|
|
212
|
+
statement = `UPDATE ?? SET ?? = 1 ${whereData["query"]};`;
|
|
213
|
+
} else {
|
|
214
|
+
statement = `DELETE FROM ?? ${whereData["query"]};`;
|
|
215
|
+
}
|
|
216
|
+
pool.query(
|
|
217
|
+
statement,
|
|
218
|
+
safeDelete != null
|
|
219
|
+
? [table, safeDelete, ...whereData["value"]]
|
|
220
|
+
: [table, ...whereData["value"]],
|
|
221
|
+
function (error, results) {
|
|
222
|
+
if (error || results === undefined) {
|
|
223
|
+
reject({ message: error.sqlMessage });
|
|
224
|
+
}
|
|
225
|
+
if (results) {
|
|
226
|
+
let rows = results.affectedRows || 0;
|
|
227
|
+
resolve({
|
|
228
|
+
message: rows + " " + table + (rows > 1 ? "s" : "") + " removed",
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function upsert(table, data, uniqueKeys = []) {
|
|
238
|
+
return new Promise((resolve, reject) => {
|
|
239
|
+
let array = [];
|
|
240
|
+
const promise = [];
|
|
241
|
+
let count = 0;
|
|
242
|
+
let total = 0;
|
|
243
|
+
if (!isset(data[0])) {
|
|
244
|
+
array.push(data);
|
|
245
|
+
} else {
|
|
246
|
+
array = data;
|
|
247
|
+
}
|
|
248
|
+
const [statement, insertColumn, updateColumn] = getChangeParameter(
|
|
249
|
+
array[0],
|
|
250
|
+
uniqueKeys,
|
|
251
|
+
);
|
|
252
|
+
let value = [];
|
|
253
|
+
for (const [i, v] of Object.entries(array)) {
|
|
254
|
+
if (array.hasOwnProperty(i)) {
|
|
255
|
+
const entry = [];
|
|
256
|
+
for (const col of insertColumn) {
|
|
257
|
+
entry.push(v[col]);
|
|
258
|
+
}
|
|
259
|
+
value.push(entry);
|
|
260
|
+
count++;
|
|
261
|
+
total++;
|
|
262
|
+
if (count > 999) {
|
|
263
|
+
promise.push(
|
|
264
|
+
pool
|
|
265
|
+
.promise()
|
|
266
|
+
.query(statement, [
|
|
267
|
+
table,
|
|
268
|
+
...insertColumn,
|
|
269
|
+
value,
|
|
270
|
+
...updateColumn,
|
|
271
|
+
]),
|
|
272
|
+
);
|
|
273
|
+
value = [];
|
|
274
|
+
count = 0;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (count > 0) {
|
|
279
|
+
promise.push(
|
|
280
|
+
pool
|
|
281
|
+
.promise()
|
|
282
|
+
.query(statement, [table, ...insertColumn, value, ...updateColumn]),
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
const response = {
|
|
287
|
+
rows: total,
|
|
288
|
+
message:
|
|
289
|
+
(total === 1
|
|
290
|
+
? `1 ${namify(table)} is `
|
|
291
|
+
: `${total} ${namify(table)}s are `) + "saved",
|
|
292
|
+
type: "success",
|
|
293
|
+
};
|
|
294
|
+
Promise.all(promise)
|
|
295
|
+
.then((results) => {
|
|
296
|
+
try {
|
|
297
|
+
if (total === 1) {
|
|
298
|
+
response["id"] = results[0][0].insertId;
|
|
299
|
+
}
|
|
300
|
+
resolve(response);
|
|
301
|
+
} catch (err) {
|
|
302
|
+
reject(err);
|
|
303
|
+
}
|
|
304
|
+
})
|
|
305
|
+
.catch((error) => {
|
|
306
|
+
reject({ message: error.sqlMessage, type: "danger" });
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
function getChangeParameter(row, uniqueKeys, onDuplicate = true) {
|
|
312
|
+
const insertColumn = Object.keys(row);
|
|
313
|
+
const updateColumn = [];
|
|
314
|
+
const queryStart =
|
|
315
|
+
"INSERT " +
|
|
316
|
+
(!onDuplicate ? "IGNORE" : "") +
|
|
317
|
+
" INTO ?? " +
|
|
318
|
+
insertParam(insertColumn.length);
|
|
319
|
+
let queryEnd = "";
|
|
320
|
+
if (onDuplicate) {
|
|
321
|
+
queryEnd = " ON DUPLICATE KEY UPDATE ";
|
|
322
|
+
for (const column of insertColumn) {
|
|
323
|
+
if (!uniqueKeys.includes(column)) {
|
|
324
|
+
if (queryEnd !== " ON DUPLICATE KEY UPDATE ") {
|
|
325
|
+
queryEnd += ",";
|
|
326
|
+
}
|
|
327
|
+
queryEnd += "??=DATA.??";
|
|
328
|
+
updateColumn.push(column);
|
|
329
|
+
updateColumn.push(column);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
queryEnd += ";";
|
|
334
|
+
return [
|
|
335
|
+
`${queryStart} VALUES ? AS DATA ${queryEnd}`,
|
|
336
|
+
insertColumn,
|
|
337
|
+
updateColumn,
|
|
338
|
+
];
|
|
339
|
+
}
|
|
340
|
+
function insertParam(number) {
|
|
341
|
+
let str = "";
|
|
342
|
+
for (let i = 0; i < number; i++) {
|
|
343
|
+
if (i === 0) {
|
|
344
|
+
str = "??";
|
|
345
|
+
} else {
|
|
346
|
+
str = str + ",??";
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return `(${str})`;
|
|
350
|
+
}
|
|
351
|
+
function arrayParam(number) {
|
|
352
|
+
let str = "";
|
|
353
|
+
for (let i = 0; i < number; i++) {
|
|
354
|
+
if (i === 0) {
|
|
355
|
+
str = "?";
|
|
356
|
+
} else {
|
|
357
|
+
str = str + ",?";
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return `(${str})`;
|
|
361
|
+
}
|
|
362
|
+
function isset(obj) {
|
|
363
|
+
return typeof obj !== "undefined";
|
|
364
|
+
}
|
|
365
|
+
function namify(text) {
|
|
366
|
+
return text
|
|
367
|
+
.replace("_", " ")
|
|
368
|
+
.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
|
|
369
|
+
}
|
|
370
|
+
module.exports = {
|
|
371
|
+
connect,
|
|
372
|
+
get,
|
|
373
|
+
list,
|
|
374
|
+
where,
|
|
375
|
+
query,
|
|
376
|
+
qcount,
|
|
377
|
+
remove,
|
|
378
|
+
upsert,
|
|
379
|
+
change: upsert,
|
|
380
|
+
pool,
|
|
381
|
+
insert,
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
function insert(table, data, uniqueKeys = []) {
|
|
385
|
+
return new Promise((resolve, reject) => {
|
|
386
|
+
let array = [];
|
|
387
|
+
const promise = [];
|
|
388
|
+
let count = 0;
|
|
389
|
+
let total = 0;
|
|
390
|
+
if (!isset(data[0])) {
|
|
391
|
+
array.push(data);
|
|
392
|
+
} else {
|
|
393
|
+
array = data;
|
|
394
|
+
}
|
|
395
|
+
const [statement, insertColumn, updateColumn] = getChangeParameter(
|
|
396
|
+
array[0],
|
|
397
|
+
uniqueKeys,
|
|
398
|
+
false,
|
|
399
|
+
);
|
|
400
|
+
let value = [];
|
|
401
|
+
for (const [i, v] of Object.entries(array)) {
|
|
402
|
+
if (array.hasOwnProperty(i)) {
|
|
403
|
+
const entry = [];
|
|
404
|
+
for (const col of insertColumn) {
|
|
405
|
+
entry.push(v[col]);
|
|
406
|
+
}
|
|
407
|
+
value.push(entry);
|
|
408
|
+
count++;
|
|
409
|
+
total++;
|
|
410
|
+
if (count > 999) {
|
|
411
|
+
promise.push(
|
|
412
|
+
pool.promise().query(statement, [table, ...insertColumn, value]),
|
|
413
|
+
);
|
|
414
|
+
value = [];
|
|
415
|
+
count = 0;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
if (count > 0) {
|
|
420
|
+
promise.push(
|
|
421
|
+
pool.promise().query(statement, [table, ...insertColumn, value]),
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
const response = {
|
|
426
|
+
rows: total,
|
|
427
|
+
message:
|
|
428
|
+
(total === 1
|
|
429
|
+
? `1 ${namify(table)} is `
|
|
430
|
+
: `${total} ${namify(table)}s are `) + "saved",
|
|
431
|
+
type: "success",
|
|
432
|
+
};
|
|
433
|
+
Promise.all(promise)
|
|
434
|
+
.then((results) => {
|
|
435
|
+
try {
|
|
436
|
+
if (total === 1) {
|
|
437
|
+
response["id"] = results[0][0].insertId;
|
|
438
|
+
}
|
|
439
|
+
resolve(response);
|
|
440
|
+
} catch (err) {
|
|
441
|
+
reject(err);
|
|
442
|
+
}
|
|
443
|
+
})
|
|
444
|
+
.catch((error) => {
|
|
445
|
+
reject({ message: error.sqlMessage, type: "danger" });
|
|
446
|
+
});
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
/*
|
|
450
|
+
function update(table, data, uniqueKeys = []) {
|
|
451
|
+
return new Promise((resolve) => {
|
|
452
|
+
let array = [];
|
|
453
|
+
const promise = [];
|
|
454
|
+
let count = 0;
|
|
455
|
+
let total = 0;
|
|
456
|
+
if (!isset(data[0])) {
|
|
457
|
+
array.push(data);
|
|
458
|
+
} else {
|
|
459
|
+
array = data;
|
|
460
|
+
}
|
|
461
|
+
const [statement, insertColumn, updateColumn] = getChangeParameter(
|
|
462
|
+
array[0],
|
|
463
|
+
uniqueKeys
|
|
464
|
+
);
|
|
465
|
+
let value = [];
|
|
466
|
+
for (const [i, v] of Object.entries(array)) {
|
|
467
|
+
if (array.hasOwnProperty(i)) {
|
|
468
|
+
const entry = [];
|
|
469
|
+
for (const col of insertColumn) {
|
|
470
|
+
entry.push(v[col]);
|
|
471
|
+
}
|
|
472
|
+
value.push(entry);
|
|
473
|
+
count++;
|
|
474
|
+
total++;
|
|
475
|
+
if (count > 999) {
|
|
476
|
+
promise.push(
|
|
477
|
+
pool
|
|
478
|
+
.promise()
|
|
479
|
+
.query(
|
|
480
|
+
statement,
|
|
481
|
+
[table, ...insertColumn, value, ...updateColumn],
|
|
482
|
+
function (_error, results) {
|
|
483
|
+
resolve(results);
|
|
484
|
+
}
|
|
485
|
+
)
|
|
486
|
+
);
|
|
487
|
+
value = [];
|
|
488
|
+
count = 0;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
if (count > 0) {
|
|
493
|
+
promise.push(
|
|
494
|
+
pool
|
|
495
|
+
.promise()
|
|
496
|
+
.query(
|
|
497
|
+
statement,
|
|
498
|
+
[table, ...insertColumn, value, ...updateColumn],
|
|
499
|
+
function (_error, results) {
|
|
500
|
+
resolve(results);
|
|
501
|
+
}
|
|
502
|
+
)
|
|
503
|
+
);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
const response = {
|
|
507
|
+
rows: total,
|
|
508
|
+
message:
|
|
509
|
+
(total === 1
|
|
510
|
+
? `1 ${namify(table)} is `
|
|
511
|
+
: `${total} ${namify(table)}s are `) + "saved",
|
|
512
|
+
type: "success",
|
|
513
|
+
};
|
|
514
|
+
Promise.all(promise)
|
|
515
|
+
.then((results) => {
|
|
516
|
+
try {
|
|
517
|
+
if (total === 1) {
|
|
518
|
+
response["id"] = results[0][0].insertId;
|
|
519
|
+
}
|
|
520
|
+
} catch (err) {}
|
|
521
|
+
resolve(response);
|
|
522
|
+
})
|
|
523
|
+
.catch((error) => {
|
|
524
|
+
resolve({ message: error.sqlMessage, type: "danger" });
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
}*/
|