@bee.js/node 0.0.48 → 0.0.50
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/lib/ORM/beeORM.js +342 -298
- package/package.json +1 -1
package/lib/ORM/beeORM.js
CHANGED
|
@@ -1,320 +1,364 @@
|
|
|
1
|
-
const mysql
|
|
2
|
-
const beeTools
|
|
1
|
+
const mysql = require("mysql2/promise"); //https://evertpot.com/executing-a-mysql-query-in-nodejs/
|
|
2
|
+
const beeTools = require("../../tools/beeTools");
|
|
3
3
|
|
|
4
|
-
const escape = function(string) {
|
|
5
|
-
|
|
4
|
+
const escape = function (string) {
|
|
5
|
+
return typeof string != "string"
|
|
6
|
+
? string
|
|
7
|
+
: string.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
|
|
6
8
|
switch (char) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
9
|
+
case "\0":
|
|
10
|
+
return "\\0";
|
|
11
|
+
case "\x08":
|
|
12
|
+
return "\\b";
|
|
13
|
+
case "\x09":
|
|
14
|
+
return "\\t";
|
|
15
|
+
case "\x1a":
|
|
16
|
+
return "\\z";
|
|
17
|
+
case "\n":
|
|
18
|
+
return "\\n";
|
|
19
|
+
case "\r":
|
|
20
|
+
return "\\r";
|
|
21
|
+
case '"':
|
|
22
|
+
case "'":
|
|
23
|
+
case "\\":
|
|
24
|
+
case "%":
|
|
25
|
+
return "\\" + char; // prepends a backslash to backslash, percent,
|
|
26
|
+
// and double/single quotes
|
|
27
|
+
default:
|
|
28
|
+
return char;
|
|
27
29
|
}
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const parseArray = function (param) {
|
|
34
|
+
switch (typeof param) {
|
|
35
|
+
case "string":
|
|
36
|
+
return param.split(",").map((a) => a.trim());
|
|
37
|
+
case "object":
|
|
38
|
+
return Object.values(param);
|
|
39
|
+
default:
|
|
40
|
+
return param || [];
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const quote = function (word, type = this.configs.databases.default.type) {
|
|
45
|
+
let escape;
|
|
46
|
+
|
|
47
|
+
switch (type) {
|
|
48
|
+
case "mysql":
|
|
49
|
+
escape = "``";
|
|
50
|
+
break;
|
|
51
|
+
case "mssql":
|
|
52
|
+
escape = "[]";
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
escape = type + type;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return escape[0] + word + escape[1];
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const stringBind = function (_string, params = {}) {
|
|
63
|
+
for (let param of Object.keys(params))
|
|
64
|
+
_string = _string.replace(":" + param, `'${params[param]}'`); // TODO fazer replace global (Expressao regular) quando a palavra a ser substituida for iniciada com o caractere :
|
|
65
|
+
|
|
66
|
+
return _string;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const modelSqlSelectFields = function (model, onlyFields = []) {
|
|
70
|
+
let fields = [];
|
|
71
|
+
|
|
72
|
+
model.fields
|
|
73
|
+
? (fields = parseArray(model.fields))
|
|
74
|
+
: Object.keys(model.schema).map((field) => {
|
|
75
|
+
if (
|
|
76
|
+
model.schema[field].out === false ||
|
|
77
|
+
(onlyFields.length && !onlyFields.includes(field))
|
|
78
|
+
)
|
|
79
|
+
return;
|
|
80
|
+
|
|
81
|
+
switch (model.schema[field].type) {
|
|
82
|
+
case "uuid":
|
|
83
|
+
case "guid":
|
|
84
|
+
fields.push(`BIN_TO_UUID(${model.table}.${field}) as ${field}`);
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
fields.push(`${model.table}.${field}`);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
return fields;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const modelSqlWhere = function (
|
|
95
|
+
model,
|
|
96
|
+
vals,
|
|
97
|
+
middlewareParams,
|
|
98
|
+
callsWhere = []
|
|
99
|
+
) {
|
|
100
|
+
const q = quote;
|
|
101
|
+
|
|
102
|
+
let SQL = "";
|
|
103
|
+
let gWhere = model.globalWhere ? q(model.globalWhere, "()") : "";
|
|
104
|
+
let keys = parseArray(model.indexes.keys);
|
|
105
|
+
|
|
106
|
+
gWhere =
|
|
107
|
+
gWhere && middlewareParams ? stringBind(gWhere, middlewareParams) : "";
|
|
108
|
+
|
|
109
|
+
if (typeof vals !== "object") vals = [vals];
|
|
110
|
+
|
|
111
|
+
vals.map((val, i) =>
|
|
112
|
+
keys.map((k) => {
|
|
113
|
+
switch (
|
|
114
|
+
model.schema[k].type //TODO encapsule
|
|
115
|
+
) {
|
|
116
|
+
case "guid":
|
|
117
|
+
case "uuid":
|
|
118
|
+
vals[i] = `UUID_TO_BIN('${val}')`;
|
|
119
|
+
break;
|
|
120
|
+
default:
|
|
121
|
+
vals[i] = `'${val}'`;
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
switch (vals.length) {
|
|
127
|
+
case 0:
|
|
128
|
+
SQL += gWhere ? ` WHERE ${gWhere}` : "";
|
|
129
|
+
break;
|
|
130
|
+
case 1:
|
|
131
|
+
SQL += ` WHERE ${model.table}.${keys[0]} = ${vals[0]} ${
|
|
132
|
+
gWhere ? "AND " + gWhere : ""
|
|
133
|
+
}`;
|
|
134
|
+
break;
|
|
135
|
+
default:
|
|
136
|
+
SQL +=
|
|
137
|
+
typeof vals == "object"
|
|
138
|
+
? ` WHERE ${model.table}.${keys[0]} IN('${vals.join("','")}') ${
|
|
139
|
+
gWhere ? "AND " + gWhere : ""
|
|
140
|
+
}`
|
|
141
|
+
: ` WHERE ${model.table}.${keys[0]} IN(${vals}) ${
|
|
142
|
+
gWhere ? "AND " + gWhere : ""
|
|
143
|
+
}`;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (callsWhere.length) SQL += `WHERE ${callsWhere.join(" AND ")}`;
|
|
147
|
+
|
|
148
|
+
return SQL;
|
|
149
|
+
};
|
|
30
150
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
151
|
+
module.exports = {
|
|
152
|
+
escape,
|
|
153
|
+
quote,
|
|
154
|
+
stringBind,
|
|
155
|
+
parseArray,
|
|
156
|
+
modelSqlWhere,
|
|
157
|
+
modelSqlSelectFields,
|
|
158
|
+
|
|
159
|
+
createPool: function (configs) {
|
|
160
|
+
// TODO criar aviso de error para falta de configs.db. Criar no hive().create
|
|
161
|
+
|
|
162
|
+
// TODO pegar dinamicamnete database utilizada
|
|
163
|
+
let db = configs.databases.default;
|
|
164
|
+
|
|
165
|
+
switch (db.type) {
|
|
166
|
+
case "mssql": // TODO implementar na versao >=1.2
|
|
167
|
+
return false;
|
|
168
|
+
case "mongo": // TODO implementar na versao >=1.2
|
|
169
|
+
return false;
|
|
170
|
+
default:
|
|
171
|
+
return mysql.createPool({
|
|
172
|
+
host: db.host,
|
|
173
|
+
user: db.user,
|
|
174
|
+
password: db.pass,
|
|
175
|
+
database: db.name,
|
|
176
|
+
waitForConnections: db.waitForConnections || true,
|
|
177
|
+
connectionLimit: db.connectionLimit || 10,
|
|
178
|
+
queueLimit: db.queueLimit || 0,
|
|
179
|
+
});
|
|
36
180
|
}
|
|
37
|
-
}
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
sqlSelect: function (model, ids = [], params = {}) {
|
|
184
|
+
//console.log(ids)
|
|
185
|
+
let SQL = [];
|
|
186
|
+
let vals = Array.isArray(ids) ? ids : ids.toString().split(",");
|
|
187
|
+
let where = modelSqlWhere(
|
|
188
|
+
model,
|
|
189
|
+
vals,
|
|
190
|
+
params.middlewareParams,
|
|
191
|
+
params.where
|
|
192
|
+
);
|
|
193
|
+
let joins = params.joins && params.joins.length ? joins.join(" ") : "";
|
|
194
|
+
let order =
|
|
195
|
+
params.orderBy && params.orderBy.length
|
|
196
|
+
? ` ORDER BY ${params.orderBy}`
|
|
197
|
+
: "";
|
|
198
|
+
let limit =
|
|
199
|
+
params.limit && params.limit.length ? ` LIMIT ${params.limit}` : "";
|
|
200
|
+
let fields = modelSqlSelectFields(model, params.fields);
|
|
201
|
+
|
|
202
|
+
SQL.push(`SELECT ${fields.join(", ")} `);
|
|
203
|
+
SQL.push(`FROM ${quote(model.table)} `);
|
|
204
|
+
SQL.push(joins);
|
|
205
|
+
SQL.push(where);
|
|
206
|
+
SQL.push(order);
|
|
207
|
+
SQL.push(limit);
|
|
208
|
+
|
|
209
|
+
return SQL;
|
|
210
|
+
},
|
|
211
|
+
|
|
212
|
+
sqlInsertUpdate(model, data, onlyFields = [], statement = "INSERT") {
|
|
213
|
+
const q = quote;
|
|
214
|
+
|
|
215
|
+
let result = {};
|
|
216
|
+
let fields = [];
|
|
217
|
+
let values = [];
|
|
218
|
+
let binds = [];
|
|
219
|
+
let insertValues = [];
|
|
220
|
+
|
|
221
|
+
data = data[0] ? data : [data];
|
|
222
|
+
|
|
223
|
+
Object.keys(data).map((key) => {
|
|
224
|
+
for (let field in model.schema) {
|
|
225
|
+
field = { ...model.schema[field], name: field };
|
|
226
|
+
|
|
227
|
+
if (field.dbControl) continue;
|
|
228
|
+
if (!field.ai && onlyFields.length && !onlyFields.includes(field.name))
|
|
229
|
+
continue;
|
|
230
|
+
|
|
231
|
+
let value = escape(data[key][field.name]);
|
|
232
|
+
let type = model.schema[field.name].type;
|
|
233
|
+
|
|
234
|
+
if (statement == "INSERT" && field.ai)
|
|
235
|
+
switch (type) {
|
|
236
|
+
case "guid":
|
|
237
|
+
case "uuid":
|
|
238
|
+
value = beeTools.guid().toString();
|
|
239
|
+
result.insertBin = beeTools.guidToBin(value);
|
|
240
|
+
result.insertUUID = value;
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
38
243
|
|
|
39
|
-
|
|
40
|
-
let escape;
|
|
244
|
+
if (value === undefined) continue;
|
|
41
245
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
246
|
+
switch (type) {
|
|
247
|
+
case "guid":
|
|
248
|
+
case "uuid":
|
|
249
|
+
value = `UUID_TO_BIN('${value}')`; //TODO mssql
|
|
45
250
|
break;
|
|
46
|
-
|
|
47
|
-
|
|
251
|
+
case "binary":
|
|
252
|
+
value = value;
|
|
48
253
|
break;
|
|
49
|
-
|
|
50
|
-
|
|
254
|
+
case "file":
|
|
255
|
+
binds.push(value);
|
|
256
|
+
value = "?";
|
|
51
257
|
break;
|
|
52
|
-
|
|
258
|
+
case "date":
|
|
259
|
+
case "datetime":
|
|
260
|
+
case "time":
|
|
261
|
+
case "timestamp":
|
|
262
|
+
value = value ? q(value, "''") : "null";
|
|
263
|
+
break;
|
|
264
|
+
default:
|
|
265
|
+
value = q(value, "''");
|
|
266
|
+
}
|
|
53
267
|
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const stringBind = function(_string, params = {}) {
|
|
58
|
-
for(let param of Object.keys(params))
|
|
59
|
-
_string = _string.replace(':'+param, `'${params[param]}'`) // TODO fazer replace global (Expressao regular) quando a palavra a ser substituida for iniciada com o caractere :
|
|
60
|
-
|
|
61
|
-
return _string
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const modelSqlSelectFields = function(model, onlyFields = []) {
|
|
65
|
-
let fields = []
|
|
66
|
-
|
|
67
|
-
model.fields
|
|
68
|
-
? fields = parseArray(model.fields)
|
|
69
|
-
: Object.keys(model.schema)
|
|
70
|
-
.map((field)=> {
|
|
71
|
-
|
|
72
|
-
if(model.schema[field].out === false || (onlyFields.length && !onlyFields.includes(field)))
|
|
73
|
-
return;
|
|
74
|
-
|
|
75
|
-
switch(model.schema[field].type) {
|
|
76
|
-
case "uuid":
|
|
77
|
-
case "guid":
|
|
78
|
-
fields.push(`BIN_TO_UUID(${model.table}.${field}) as ${field}`)
|
|
79
|
-
break
|
|
80
|
-
default: fields.push(`${model.table}.${field}`)
|
|
81
|
-
}
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
return fields
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const modelSqlWhere = function(model, vals, middlewareParams, callsWhere = []) {
|
|
88
|
-
const q = quote
|
|
89
|
-
|
|
90
|
-
let SQL = ''
|
|
91
|
-
let gWhere = model.globalWhere ? q(model.globalWhere, '()') : ''
|
|
92
|
-
let keys = parseArray(model.indexes.keys)
|
|
93
|
-
|
|
94
|
-
gWhere = gWhere && middlewareParams
|
|
95
|
-
? stringBind(gWhere, middlewareParams)
|
|
96
|
-
: ''
|
|
97
|
-
|
|
98
|
-
if(typeof(vals) !== 'object') vals = [vals]
|
|
99
|
-
|
|
100
|
-
vals
|
|
101
|
-
.map((val, i)=> keys
|
|
102
|
-
.map((k)=> {
|
|
103
|
-
switch(model.schema[k].type){ //TODO encapsule
|
|
104
|
-
case "guid":
|
|
105
|
-
case "uuid":
|
|
106
|
-
vals[i] = `UUID_TO_BIN('${val}')`
|
|
107
|
-
break
|
|
108
|
-
default:
|
|
109
|
-
vals[i] = `'${val}'`
|
|
110
|
-
}
|
|
111
|
-
})
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
switch(vals.length) {
|
|
115
|
-
case 0 : SQL += gWhere
|
|
116
|
-
? ` WHERE ${gWhere}`
|
|
117
|
-
: ''
|
|
118
|
-
break
|
|
119
|
-
case 1 : SQL += ` WHERE ${model.table}.${keys[0]} = ${vals[0]} ${gWhere ? 'AND ' + gWhere : ''}`
|
|
120
|
-
break
|
|
121
|
-
default: SQL += typeof(vals) == 'object'
|
|
122
|
-
? ` WHERE ${model.table}.${keys[0]} IN('${vals.join("','")}') ${gWhere ? 'AND ' + gWhere : ''}`
|
|
123
|
-
: ` WHERE ${model.table}.${keys[0]} IN(${vals}) ${gWhere ? 'AND ' + gWhere : ''}`
|
|
124
|
-
}
|
|
268
|
+
if (field.onInput) value = field.onInput + "(" + value + ")";
|
|
125
269
|
|
|
126
|
-
|
|
127
|
-
|
|
270
|
+
if (statement === "INSERT") {
|
|
271
|
+
if (key == 0) fields.push(q(field.name));
|
|
128
272
|
|
|
129
|
-
|
|
130
|
-
}
|
|
273
|
+
values.push(value);
|
|
274
|
+
} else {
|
|
275
|
+
values.push(q(field.name) + "=" + value);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (statement === "INSERT") {
|
|
279
|
+
insertValues.push(values.join(","));
|
|
280
|
+
values = [];
|
|
281
|
+
}
|
|
282
|
+
});
|
|
131
283
|
|
|
132
|
-
|
|
284
|
+
let SQL =
|
|
285
|
+
statement === "INSERT"
|
|
286
|
+
? `INSERT INTO ${model.table} (${fields.join(
|
|
287
|
+
","
|
|
288
|
+
)}) VALUES (${insertValues.join("),(")})`
|
|
289
|
+
: `UPDATE ${model.table} SET ${values.join(",")}`;
|
|
133
290
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
stringBind,
|
|
137
|
-
parseArray,
|
|
138
|
-
modelSqlWhere,
|
|
139
|
-
modelSqlSelectFields,
|
|
140
|
-
|
|
141
|
-
createPool: function(configs) {
|
|
142
|
-
// TODO criar aviso de error para falta de configs.db. Criar no hive().create
|
|
143
|
-
|
|
144
|
-
// TODO pegar dinamicamnete database utilizada
|
|
145
|
-
let db = configs.databases.default
|
|
146
|
-
|
|
147
|
-
switch(db.type) {
|
|
148
|
-
case 'mssql': // TODO implementar na versao >=1.2
|
|
149
|
-
return false
|
|
150
|
-
case 'mongo': // TODO implementar na versao >=1.2
|
|
151
|
-
return false
|
|
152
|
-
default:
|
|
153
|
-
return mysql.createPool({
|
|
154
|
-
host: db.host,
|
|
155
|
-
user: db.user,
|
|
156
|
-
password: db.pass,
|
|
157
|
-
database: db.name,
|
|
158
|
-
waitForConnections: db.waitForConnections || true,
|
|
159
|
-
connectionLimit: db.connectionLimit || 10,
|
|
160
|
-
queueLimit: db.queueLimit || 0
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
sqlSelect: function(model, ids = [], params = {}) { //console.log(ids)
|
|
166
|
-
let SQL = []
|
|
167
|
-
let vals = Array.isArray(ids) ? ids : ids.toString().split(',')
|
|
168
|
-
let where = modelSqlWhere(model, vals, params.middlewareParams, params.where)
|
|
169
|
-
let joins = params.joins && params.joins.length ? joins.join(' ') : ''
|
|
170
|
-
let order = params.orderBy && params.orderBy.length ? ` ORDER BY ${params.orderBy}` : ''
|
|
171
|
-
let limit = params.limit && params.limit.length ? ` LIMIT ${params.limit}` : ''
|
|
172
|
-
let fields = modelSqlSelectFields(model, params.fields)
|
|
173
|
-
|
|
174
|
-
SQL.push(`SELECT ${fields.join(', ')} `)
|
|
175
|
-
SQL.push(`FROM ${quote(model.table)} `)
|
|
176
|
-
SQL.push(joins)
|
|
177
|
-
SQL.push(where)
|
|
178
|
-
SQL.push(order)
|
|
179
|
-
SQL.push(limit)
|
|
180
|
-
|
|
181
|
-
return SQL
|
|
182
|
-
},
|
|
183
|
-
|
|
184
|
-
sqlInsertUpdate(model, data, onlyFields = [], statement = 'INSERT') {
|
|
185
|
-
const q = quote
|
|
186
|
-
|
|
187
|
-
let result = {}
|
|
188
|
-
let fields = []
|
|
189
|
-
let values = []
|
|
190
|
-
let binds = []
|
|
191
|
-
let insertValues = []
|
|
192
|
-
|
|
193
|
-
data = data[0] ? data : [data]
|
|
194
|
-
|
|
195
|
-
Object
|
|
196
|
-
.keys(data)
|
|
197
|
-
.map((key) => {
|
|
198
|
-
for(let field in model.schema) {
|
|
199
|
-
|
|
200
|
-
field = {...model.schema[field], name: field}
|
|
201
|
-
|
|
202
|
-
if(field.dbControl) continue
|
|
203
|
-
if(!field.ai && onlyFields.length && !onlyFields.includes(field.name)) continue
|
|
204
|
-
|
|
205
|
-
let value = data[key][field.name]
|
|
206
|
-
let type = model.schema[field.name].type
|
|
207
|
-
|
|
208
|
-
if(statement == "INSERT" && field.ai)
|
|
209
|
-
switch(type) {
|
|
210
|
-
case "guid":
|
|
211
|
-
case "uuid":
|
|
212
|
-
value = beeTools.guid().toString()
|
|
213
|
-
result.insertBin = beeTools.guidToBin(value)
|
|
214
|
-
result.insertUUID = value
|
|
215
|
-
break
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if(value === undefined) continue
|
|
219
|
-
|
|
220
|
-
switch(type) {
|
|
221
|
-
case "guid":
|
|
222
|
-
case "uuid":
|
|
223
|
-
value = `UUID_TO_BIN('${value}')` //TODO mssql
|
|
224
|
-
break
|
|
225
|
-
case "binary":
|
|
226
|
-
value = value
|
|
227
|
-
break
|
|
228
|
-
case "file":
|
|
229
|
-
binds.push(value)
|
|
230
|
-
value = "?"
|
|
231
|
-
break
|
|
232
|
-
case "date":
|
|
233
|
-
case "datetime":
|
|
234
|
-
case "time":
|
|
235
|
-
case "timestamp":
|
|
236
|
-
value = value ? q(value,"''") : "null"
|
|
237
|
-
break
|
|
238
|
-
default:
|
|
239
|
-
value = q(value,"''")
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if(field.onInput)
|
|
243
|
-
value = field.onInput + '(' + value + ')'
|
|
244
|
-
|
|
245
|
-
if(statement === 'INSERT') {
|
|
246
|
-
if(key == 0)
|
|
247
|
-
fields.push(q(field.name))
|
|
248
|
-
|
|
249
|
-
values.push(value)
|
|
250
|
-
} else {
|
|
251
|
-
values.push(q(field.name) + '=' + value)
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
if(statement === 'INSERT') {
|
|
255
|
-
insertValues.push(values.join(","))
|
|
256
|
-
values = []
|
|
257
|
-
}
|
|
258
|
-
});
|
|
291
|
+
return { result, SQL, binds };
|
|
292
|
+
},
|
|
259
293
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
save: (model, key = null) => { //TODO, tirar daqui.
|
|
268
|
-
var fields = Object.keys(model.schema)
|
|
269
|
-
var body = []
|
|
270
|
-
|
|
271
|
-
//key = 1 //test
|
|
272
|
-
|
|
273
|
-
for (let i = 0; i <= req.body.length-1; i++) {
|
|
274
|
-
var values = []
|
|
275
|
-
|
|
276
|
-
for(field of fields) {
|
|
277
|
-
let out = model.schema[field].out || a
|
|
278
|
-
let value = (req.body[i] || req.body)[out]
|
|
279
|
-
|
|
280
|
-
//TODO inserir validacoes
|
|
281
|
-
|
|
282
|
-
value = ["guid","binary"].includes(model.schema[field].type)
|
|
283
|
-
? value
|
|
284
|
-
: q(value,"''")
|
|
285
|
-
|
|
286
|
-
values.push({field:field, out: out, value: value})
|
|
287
|
-
}
|
|
288
|
-
body.push(values)
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if (key!==null) {
|
|
292
|
-
body = body[0].filter((a)=>a.value).map((a)=> a = a.field + `=${a.value}` ).join()
|
|
293
|
-
db.query(`UPDATE ${model.table} SET ${body} WHERE ${model.fieldKey} = ${key}`)
|
|
294
|
-
}else{
|
|
295
|
-
body = body.map((a)=> a.map((a)=>`${a.value}`)).join("),(")
|
|
296
|
-
db.query(`INSERT INTO ${model.table} (${Object.keys(model.schema)}) VALUES(${body})`)
|
|
297
|
-
}
|
|
298
|
-
},
|
|
294
|
+
save: (model, key = null) => {
|
|
295
|
+
//TODO, tirar daqui.
|
|
296
|
+
var fields = Object.keys(model.schema);
|
|
297
|
+
var body = [];
|
|
298
|
+
|
|
299
|
+
//key = 1 //test
|
|
299
300
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
},
|
|
303
|
-
|
|
304
|
-
sqlDelete: (model, keys) => { //TODO
|
|
305
|
-
return db.query(`DELETE FROM ${model.table} WHERE ${table.fieldKey} = (${key})`)
|
|
306
|
-
},
|
|
301
|
+
for (let i = 0; i <= req.body.length - 1; i++) {
|
|
302
|
+
var values = [];
|
|
307
303
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
304
|
+
for (field of fields) {
|
|
305
|
+
let out = model.schema[field].out || a;
|
|
306
|
+
let value = (req.body[i] || req.body)[out];
|
|
311
307
|
|
|
312
|
-
|
|
313
|
-
},
|
|
308
|
+
//TODO inserir validacoes
|
|
314
309
|
|
|
315
|
-
|
|
316
|
-
|
|
310
|
+
value = ["guid", "binary"].includes(model.schema[field].type)
|
|
311
|
+
? value
|
|
312
|
+
: q(value, "''");
|
|
313
|
+
|
|
314
|
+
values.push({ field: field, out: out, value: value });
|
|
315
|
+
}
|
|
316
|
+
body.push(values);
|
|
317
|
+
}
|
|
317
318
|
|
|
318
|
-
|
|
319
|
+
if (key !== null) {
|
|
320
|
+
body = body[0]
|
|
321
|
+
.filter((a) => a.value)
|
|
322
|
+
.map((a) => (a = a.field + `=${a.value}`))
|
|
323
|
+
.join();
|
|
324
|
+
db.query(
|
|
325
|
+
`UPDATE ${model.table} SET ${body} WHERE ${model.fieldKey} = ${key}`
|
|
326
|
+
);
|
|
327
|
+
} else {
|
|
328
|
+
body = body.map((a) => a.map((a) => `${a.value}`)).join("),(");
|
|
329
|
+
db.query(
|
|
330
|
+
`INSERT INTO ${model.table} (${Object.keys(
|
|
331
|
+
model.schema
|
|
332
|
+
)}) VALUES(${body})`
|
|
333
|
+
);
|
|
319
334
|
}
|
|
320
|
-
}
|
|
335
|
+
},
|
|
336
|
+
|
|
337
|
+
sqlUpdate: (model, keys) => {
|
|
338
|
+
//TODO
|
|
339
|
+
return db.query(
|
|
340
|
+
`UPDATE ${model.table} SET TODO WHERE ${table.fieldKey} = (${key})`
|
|
341
|
+
);
|
|
342
|
+
},
|
|
343
|
+
|
|
344
|
+
sqlDelete: (model, keys) => {
|
|
345
|
+
//TODO
|
|
346
|
+
return db.query(
|
|
347
|
+
`DELETE FROM ${model.table} WHERE ${table.fieldKey} = (${key})`
|
|
348
|
+
);
|
|
349
|
+
},
|
|
350
|
+
|
|
351
|
+
forceData(data, req = {}) {
|
|
352
|
+
// TODO coocar funcao para pegar apenas campos do middlaware marcados para INSERT e UPDATE.
|
|
353
|
+
// Se nao campos do tipo IDUser_Profile poderá ser forçado pelo middleware invés do post form.
|
|
354
|
+
|
|
355
|
+
return Object.assign({}, data, req.token || {}, req.middleware || {});
|
|
356
|
+
},
|
|
357
|
+
|
|
358
|
+
formatOut(data, model) {
|
|
359
|
+
//TODO
|
|
360
|
+
if (!model) return data;
|
|
361
|
+
|
|
362
|
+
return data;
|
|
363
|
+
},
|
|
364
|
+
};
|