@bee.js/node 0.0.37 → 0.0.38
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/beeRequest.js +42 -42
- package/beehive.js +482 -482
- package/index.js +14 -14
- package/lib/DBA/beeDBA.js +119 -119
- package/lib/DEV/beeDEV.js +41 -41
- package/lib/JWT/beeJWT.js +72 -72
- package/lib/ORM/beeORM.js +319 -314
- package/lib/WEB/freeRoute.js +4 -4
- package/lib/WEB/route.js +27 -27
- package/lib/beeHive/create.js +51 -51
- package/lib/beeHive/headers.js +9 -9
- package/lib/beeHive/load.js +19 -19
- package/lib/beeHive/log.js +2 -2
- package/lib/beeHive/routes.js +34 -34
- package/lib/beeHive/start.js +29 -29
- package/package.json +40 -40
- package/security/index.js +8 -8
- package/services/CRON.js +8 -8
- package/services/EMAIL.js +2 -2
- package/services/HTTP.js +32 -32
- package/services/HTTPS.js +31 -31
- package/services/LOGS.js +7 -7
- package/services/SCRIPT.js +13 -13
- package/services/SHELL.js +2 -2
- package/services/index.js +9 -9
- package/tools/beeTools.js +18 -18
- package/tools/guid.js +14 -14
- package/tools/hash.js +12 -12
- package/tools/model.js +20 -20
- package/tools/slug.js +16 -16
- package/tools/string.js +55 -55
package/lib/ORM/beeORM.js
CHANGED
|
@@ -1,315 +1,320 @@
|
|
|
1
|
-
const mysql = require('mysql2/promise'); //https://evertpot.com/executing-a-mysql-query-in-nodejs/
|
|
2
|
-
const beeTools = require('../../tools/beeTools');
|
|
3
|
-
|
|
4
|
-
const escape = function(string) {
|
|
5
|
-
return string.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
|
|
6
|
-
switch (char) {
|
|
7
|
-
case "\0":
|
|
8
|
-
return "\\0";
|
|
9
|
-
case "\x08":
|
|
10
|
-
return "\\b";
|
|
11
|
-
case "\x09":
|
|
12
|
-
return "\\t";
|
|
13
|
-
case "\x1a":
|
|
14
|
-
return "\\z";
|
|
15
|
-
case "\n":
|
|
16
|
-
return "\\n";
|
|
17
|
-
case "\r":
|
|
18
|
-
return "\\r";
|
|
19
|
-
case "\"":
|
|
20
|
-
case "'":
|
|
21
|
-
case "\\":
|
|
22
|
-
case "%":
|
|
23
|
-
return "\\"+char; // prepends a backslash to backslash, percent,
|
|
24
|
-
// and double/single quotes
|
|
25
|
-
default:
|
|
26
|
-
return char;
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const parseArray = function(param) {
|
|
32
|
-
switch(typeof(param)){
|
|
33
|
-
case 'string': return param.split(',').map((a)=>a.trim())
|
|
34
|
-
case 'object': return Object.values(param)
|
|
35
|
-
default: return param || []
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const quote = function(word, type = this.configs.databases.default.type) {
|
|
40
|
-
let escape;
|
|
41
|
-
|
|
42
|
-
switch (type) {
|
|
43
|
-
case 'mysql':
|
|
44
|
-
escape = '``'
|
|
45
|
-
break;
|
|
46
|
-
case 'mssql':
|
|
47
|
-
escape = '[]'
|
|
48
|
-
break;
|
|
49
|
-
default:
|
|
50
|
-
escape = type + type
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return escape[0] + word + escape[1]
|
|
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
|
-
}
|
|
125
|
-
|
|
126
|
-
if(callsWhere.length)
|
|
127
|
-
SQL += `WHERE ${callsWhere.join(' AND ')}`
|
|
128
|
-
|
|
129
|
-
return SQL
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
module.exports = {
|
|
133
|
-
|
|
134
|
-
escape,
|
|
135
|
-
quote,
|
|
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
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
.
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if(
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
let
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
case "
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
result.
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
case "
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
case "
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
1
|
+
const mysql = require('mysql2/promise'); //https://evertpot.com/executing-a-mysql-query-in-nodejs/
|
|
2
|
+
const beeTools = require('../../tools/beeTools');
|
|
3
|
+
|
|
4
|
+
const escape = function(string) {
|
|
5
|
+
return string.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function (char) {
|
|
6
|
+
switch (char) {
|
|
7
|
+
case "\0":
|
|
8
|
+
return "\\0";
|
|
9
|
+
case "\x08":
|
|
10
|
+
return "\\b";
|
|
11
|
+
case "\x09":
|
|
12
|
+
return "\\t";
|
|
13
|
+
case "\x1a":
|
|
14
|
+
return "\\z";
|
|
15
|
+
case "\n":
|
|
16
|
+
return "\\n";
|
|
17
|
+
case "\r":
|
|
18
|
+
return "\\r";
|
|
19
|
+
case "\"":
|
|
20
|
+
case "'":
|
|
21
|
+
case "\\":
|
|
22
|
+
case "%":
|
|
23
|
+
return "\\"+char; // prepends a backslash to backslash, percent,
|
|
24
|
+
// and double/single quotes
|
|
25
|
+
default:
|
|
26
|
+
return char;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const parseArray = function(param) {
|
|
32
|
+
switch(typeof(param)){
|
|
33
|
+
case 'string': return param.split(',').map((a)=>a.trim())
|
|
34
|
+
case 'object': return Object.values(param)
|
|
35
|
+
default: return param || []
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const quote = function(word, type = this.configs.databases.default.type) {
|
|
40
|
+
let escape;
|
|
41
|
+
|
|
42
|
+
switch (type) {
|
|
43
|
+
case 'mysql':
|
|
44
|
+
escape = '``'
|
|
45
|
+
break;
|
|
46
|
+
case 'mssql':
|
|
47
|
+
escape = '[]'
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
escape = type + type
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return escape[0] + word + escape[1]
|
|
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
|
+
}
|
|
125
|
+
|
|
126
|
+
if(callsWhere.length)
|
|
127
|
+
SQL += `WHERE ${callsWhere.join(' AND ')}`
|
|
128
|
+
|
|
129
|
+
return SQL
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
module.exports = {
|
|
133
|
+
|
|
134
|
+
escape,
|
|
135
|
+
quote,
|
|
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
|
+
});
|
|
259
|
+
|
|
260
|
+
let SQL = statement === 'INSERT'
|
|
261
|
+
? `INSERT INTO ${model.table} (${fields.join(",")}) VALUES (${insertValues.join("),(")})`
|
|
262
|
+
: `UPDATE ${model.table} SET ${values.join(',')}`
|
|
263
|
+
|
|
264
|
+
return { result, SQL, binds }
|
|
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
|
+
},
|
|
299
|
+
|
|
300
|
+
sqlUpdate: (model, keys) => { //TODO
|
|
301
|
+
return db.query(`UPDATE ${model.table} SET TODO WHERE ${table.fieldKey} = (${key})`)
|
|
302
|
+
},
|
|
303
|
+
|
|
304
|
+
sqlDelete: (model, keys) => { //TODO
|
|
305
|
+
return db.query(`DELETE FROM ${model.table} WHERE ${table.fieldKey} = (${key})`)
|
|
306
|
+
},
|
|
307
|
+
|
|
308
|
+
forceData(data, req = {}) {
|
|
309
|
+
// TODO coocar funcao para pegar apenas campos do middlaware marcados para INSERT e UPDATE.
|
|
310
|
+
// Se nao campos do tipo IDUser_Profile poderá ser forçado pelo middleware invés do post form.
|
|
311
|
+
|
|
312
|
+
return Object.assign({}, data, req.token || {}, req.middleware || {})
|
|
313
|
+
},
|
|
314
|
+
|
|
315
|
+
formatOut(data, model) { //TODO
|
|
316
|
+
if(!model) return data
|
|
317
|
+
|
|
318
|
+
return data
|
|
319
|
+
}
|
|
315
320
|
}
|
package/lib/WEB/freeRoute.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const route = require('./route')
|
|
2
|
-
|
|
3
|
-
module.exports = function(req, res, next) {
|
|
4
|
-
return route(req, res, next, true)
|
|
1
|
+
const route = require('./route')
|
|
2
|
+
|
|
3
|
+
module.exports = function(req, res, next) {
|
|
4
|
+
return route(req, res, next, true)
|
|
5
5
|
}
|