@xuda.io/xuda-dbs-plugin-xuda 1.0.124 → 1.0.125
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/package.json +1 -1
- package/server.js +34 -10
- package/studio.mjs +98 -89
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@xuda.io/xuda-dbs-plugin-xuda",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.125",
|
4
4
|
"description": "Xuda Database Socket for Xuda's proprietary structure powered by CouchDB",
|
5
5
|
"scripts": {
|
6
6
|
"pub": "npm version patch --force && npm publish --access public"
|
package/server.js
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
const _ = require("lodash");
|
2
2
|
const crypto = require("node:crypto");
|
3
3
|
|
4
|
-
|
4
|
+
exports.check_unique = async function (
|
5
|
+
e,
|
6
|
+
docP,
|
7
|
+
table_obj,
|
8
|
+
db,
|
9
|
+
app_id_reference
|
10
|
+
) {
|
5
11
|
var len = docP.udfIndex.length;
|
6
12
|
if (!len) {
|
7
13
|
return { code: -11, data: "table must have primary index" };
|
@@ -1306,14 +1312,20 @@ exports.create = async (params, setup_doc, resolve, reject) => {
|
|
1306
1312
|
error: {},
|
1307
1313
|
},
|
1308
1314
|
|
1309
|
-
ts:
|
1310
|
-
date:
|
1315
|
+
ts: Date.now(),
|
1316
|
+
date: Date.now(),
|
1311
1317
|
};
|
1312
1318
|
const index_ret = await get_index_json(doc, table_obj);
|
1313
1319
|
if (index_ret < 0) throw index_ret.data;
|
1314
1320
|
doc.udfIndex = index_ret.data;
|
1315
1321
|
|
1316
|
-
const ret = await check_unique(
|
1322
|
+
const ret = await module.exports.check_unique(
|
1323
|
+
e,
|
1324
|
+
doc,
|
1325
|
+
table_obj,
|
1326
|
+
db,
|
1327
|
+
app_id_reference
|
1328
|
+
);
|
1317
1329
|
if (ret.code < 0) {
|
1318
1330
|
throw ret;
|
1319
1331
|
}
|
@@ -1341,15 +1353,21 @@ exports.create = async (params, setup_doc, resolve, reject) => {
|
|
1341
1353
|
error: {},
|
1342
1354
|
},
|
1343
1355
|
|
1344
|
-
ts:
|
1345
|
-
date:
|
1356
|
+
ts: Date.now(),
|
1357
|
+
date: Date.now(),
|
1346
1358
|
};
|
1347
1359
|
const index_ret = await get_index_json(doc, table_obj);
|
1348
1360
|
if (index_ret.code < 0) {
|
1349
1361
|
return index_ret;
|
1350
1362
|
}
|
1351
1363
|
doc.udfIndex = index_ret.data;
|
1352
|
-
const ret = await check_unique(
|
1364
|
+
const ret = await module.exports.check_unique(
|
1365
|
+
e,
|
1366
|
+
doc,
|
1367
|
+
table_obj,
|
1368
|
+
db,
|
1369
|
+
app_id_reference
|
1370
|
+
);
|
1353
1371
|
if (ret.code < 0) {
|
1354
1372
|
return reject(ret.data);
|
1355
1373
|
}
|
@@ -1445,7 +1463,13 @@ exports.update = async (params, setup_doc, resolve, reject) => {
|
|
1445
1463
|
return index_ret;
|
1446
1464
|
}
|
1447
1465
|
doc.udfIndex = index_ret.data;
|
1448
|
-
const ret = await check_unique(
|
1466
|
+
const ret = await module.exports.check_unique(
|
1467
|
+
e,
|
1468
|
+
doc,
|
1469
|
+
table_obj,
|
1470
|
+
db,
|
1471
|
+
app_id_reference
|
1472
|
+
);
|
1449
1473
|
if (ret.code < 0) {
|
1450
1474
|
return ret;
|
1451
1475
|
}
|
@@ -1479,7 +1503,7 @@ exports.delete = async (params, setup_doc, resolve, reject) => {
|
|
1479
1503
|
});
|
1480
1504
|
} else {
|
1481
1505
|
doc.stat = 4;
|
1482
|
-
doc.ts =
|
1506
|
+
doc.ts = Date.now();
|
1483
1507
|
docs_to_delete.push(doc);
|
1484
1508
|
}
|
1485
1509
|
}
|
@@ -1505,7 +1529,7 @@ exports.restore = async (params, setup_doc, resolve, reject) => {
|
|
1505
1529
|
|
1506
1530
|
if (doc && doc._id) {
|
1507
1531
|
doc.stat = 3;
|
1508
|
-
doc.ts =
|
1532
|
+
doc.ts = Date.now();
|
1509
1533
|
docs_to_restore.push(doc);
|
1510
1534
|
}
|
1511
1535
|
}
|
package/studio.mjs
CHANGED
@@ -1,104 +1,113 @@
|
|
1
1
|
var _this = {};
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
const check_unique = async function (e, docP, table_obj, db) {
|
4
|
+
if (typeof func !== "undefined") {
|
5
|
+
const SESSION_ID = Object.keys(SESSION_OBJ)[0];
|
6
|
+
const ret = await func.common.perform_rpi_request(SESSION_ID, serviceP);
|
7
|
+
return ret``;
|
7
8
|
}
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
ret = {
|
14
|
-
code: -14,
|
15
|
-
data: "table definition missing for: " + val.fileId,
|
16
|
-
};
|
17
|
-
break;
|
9
|
+
|
10
|
+
const local = async function () {
|
11
|
+
var len = docP.udfIndex.length;
|
12
|
+
if (!len) {
|
13
|
+
return { code: -11, data: "table must have primary index" };
|
18
14
|
}
|
15
|
+
var found_unique = undefined;
|
16
|
+
var ret = { code: 1, data: "ok" };
|
17
|
+
|
18
|
+
for await (var val of docP.udfIndex) {
|
19
|
+
if (!table_obj.tableIndexes) {
|
20
|
+
ret = {
|
21
|
+
code: -14,
|
22
|
+
data: "table definition missing for: " + val.fileId,
|
23
|
+
};
|
24
|
+
break;
|
25
|
+
}
|
19
26
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
27
|
+
const table_index = find_item_by_key_root(
|
28
|
+
table_obj.tableIndexes,
|
29
|
+
"id",
|
30
|
+
val.indexId
|
31
|
+
);
|
25
32
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
+
if (!table_index) {
|
34
|
+
ret = {
|
35
|
+
code: -13,
|
36
|
+
data: "keys definition missing for Table: " + val.fileId,
|
37
|
+
};
|
38
|
+
break;
|
39
|
+
}
|
33
40
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
if (!table_index.data.unique) {
|
42
|
+
continue;
|
43
|
+
}
|
44
|
+
if (!table_index?.data?.keys || _.isEmpty(table_index.data.keys)) {
|
45
|
+
ret = {
|
46
|
+
code: -14,
|
47
|
+
data: "keys definition missing for index: " + val.indexId,
|
48
|
+
};
|
49
|
+
break;
|
50
|
+
}
|
44
51
|
|
45
|
-
|
46
|
-
|
52
|
+
var keysArr = table_index.data.keys;
|
53
|
+
var keyValue = [];
|
47
54
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
55
|
+
for await (const [keySegment, valSegment] of Object.entries(keysArr)) {
|
56
|
+
// run on key segment
|
57
|
+
let _fieldType = find_item_by_key(
|
58
|
+
table_obj.tableFields,
|
59
|
+
"field_id",
|
60
|
+
valSegment
|
61
|
+
).props.fieldType;
|
62
|
+
let _val = await get_cast_val(
|
63
|
+
"check_unique",
|
64
|
+
valSegment,
|
65
|
+
_fieldType,
|
66
|
+
val.keyValue[Number(keySegment)]
|
67
|
+
);
|
68
|
+
keyValue.push(_val);
|
69
|
+
}
|
63
70
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
71
|
+
var key =
|
72
|
+
'["' +
|
73
|
+
val.fileId +
|
74
|
+
'","' +
|
75
|
+
val.indexId +
|
76
|
+
'",[' +
|
77
|
+
keyValue.join(",") +
|
78
|
+
"]]";
|
79
|
+
try {
|
80
|
+
e.view = "db_index";
|
81
|
+
const ret = await query_db(e, db, table_obj);
|
82
|
+
const json = ret.data;
|
83
|
+
|
84
|
+
// var data;
|
85
|
+
|
86
|
+
if (json.code > 0) {
|
87
|
+
var data = json.data;
|
88
|
+
if (data?.rows?.length) {
|
89
|
+
for await (var val of data.rows) {
|
90
|
+
if (val.id !== docP._id) {
|
91
|
+
found_unique = true;
|
92
|
+
}
|
93
|
+
}
|
94
|
+
if (found_unique) {
|
95
|
+
throw "error checking unique:" + key;
|
85
96
|
}
|
86
|
-
}
|
87
|
-
if (found_unique) {
|
88
|
-
throw "error checking unique:" + key;
|
89
97
|
}
|
90
98
|
}
|
99
|
+
// throw json.data;
|
100
|
+
return { code: 1, data: "ok" };
|
101
|
+
} catch (msg) {
|
102
|
+
console.error(msg);
|
103
|
+
ret = { code: -22, data: msg };
|
104
|
+
break;
|
91
105
|
}
|
92
|
-
// throw json.data;
|
93
|
-
return { code: 1, data: "ok" };
|
94
|
-
} catch (msg) {
|
95
|
-
console.error(msg);
|
96
|
-
ret = { code: -22, data: msg };
|
97
|
-
break;
|
98
106
|
}
|
99
|
-
}
|
100
107
|
|
101
|
-
|
108
|
+
return ret;
|
109
|
+
};
|
110
|
+
return await local();
|
102
111
|
};
|
103
112
|
|
104
113
|
const get_index_json = async function (docInP, table_obj) {
|
@@ -1323,8 +1332,8 @@ export const create = async (params, resolve, reject) => {
|
|
1323
1332
|
error: {},
|
1324
1333
|
},
|
1325
1334
|
|
1326
|
-
ts:
|
1327
|
-
date:
|
1335
|
+
ts: Date.now(),
|
1336
|
+
date: Date.now(),
|
1328
1337
|
};
|
1329
1338
|
const index_ret = await get_index_json(doc, table_obj);
|
1330
1339
|
if (index_ret.code < 0) {
|
@@ -1461,7 +1470,7 @@ export const del = async (params, resolve, reject) => {
|
|
1461
1470
|
});
|
1462
1471
|
} else {
|
1463
1472
|
doc.stat = 4;
|
1464
|
-
doc.ts =
|
1473
|
+
doc.ts = Date.now();
|
1465
1474
|
docs_to_delete.push(doc);
|
1466
1475
|
}
|
1467
1476
|
}
|
@@ -1485,7 +1494,7 @@ export const restore = async (params, resolve, reject) => {
|
|
1485
1494
|
|
1486
1495
|
if (doc && doc._id) {
|
1487
1496
|
doc.stat = 3;
|
1488
|
-
doc.ts =
|
1497
|
+
doc.ts = Date.now();
|
1489
1498
|
docs_to_restore.push(doc);
|
1490
1499
|
}
|
1491
1500
|
}
|