@xuda.io/xuda-dbs-plugin-xuda 1.0.124 → 1.0.126
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 +103 -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.126",
|
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,118 @@
|
|
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(
|
7
|
+
SESSION_ID,
|
8
|
+
serviceP,
|
9
|
+
{},
|
10
|
+
docP
|
11
|
+
);
|
12
|
+
return ret``;
|
7
13
|
}
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
ret = {
|
14
|
-
code: -14,
|
15
|
-
data: "table definition missing for: " + val.fileId,
|
16
|
-
};
|
17
|
-
break;
|
14
|
+
|
15
|
+
const local = async function () {
|
16
|
+
var len = docP.udfIndex.length;
|
17
|
+
if (!len) {
|
18
|
+
return { code: -11, data: "table must have primary index" };
|
18
19
|
}
|
20
|
+
var found_unique = undefined;
|
21
|
+
var ret = { code: 1, data: "ok" };
|
22
|
+
|
23
|
+
for await (var val of docP.udfIndex) {
|
24
|
+
if (!table_obj.tableIndexes) {
|
25
|
+
ret = {
|
26
|
+
code: -14,
|
27
|
+
data: "table definition missing for: " + val.fileId,
|
28
|
+
};
|
29
|
+
break;
|
30
|
+
}
|
19
31
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
32
|
+
const table_index = find_item_by_key_root(
|
33
|
+
table_obj.tableIndexes,
|
34
|
+
"id",
|
35
|
+
val.indexId
|
36
|
+
);
|
25
37
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
38
|
+
if (!table_index) {
|
39
|
+
ret = {
|
40
|
+
code: -13,
|
41
|
+
data: "keys definition missing for Table: " + val.fileId,
|
42
|
+
};
|
43
|
+
break;
|
44
|
+
}
|
33
45
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
46
|
+
if (!table_index.data.unique) {
|
47
|
+
continue;
|
48
|
+
}
|
49
|
+
if (!table_index?.data?.keys || _.isEmpty(table_index.data.keys)) {
|
50
|
+
ret = {
|
51
|
+
code: -14,
|
52
|
+
data: "keys definition missing for index: " + val.indexId,
|
53
|
+
};
|
54
|
+
break;
|
55
|
+
}
|
44
56
|
|
45
|
-
|
46
|
-
|
57
|
+
var keysArr = table_index.data.keys;
|
58
|
+
var keyValue = [];
|
47
59
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
for await (const [keySegment, valSegment] of Object.entries(keysArr)) {
|
61
|
+
// run on key segment
|
62
|
+
let _fieldType = find_item_by_key(
|
63
|
+
table_obj.tableFields,
|
64
|
+
"field_id",
|
65
|
+
valSegment
|
66
|
+
).props.fieldType;
|
67
|
+
let _val = await get_cast_val(
|
68
|
+
"check_unique",
|
69
|
+
valSegment,
|
70
|
+
_fieldType,
|
71
|
+
val.keyValue[Number(keySegment)]
|
72
|
+
);
|
73
|
+
keyValue.push(_val);
|
74
|
+
}
|
63
75
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
76
|
+
var key =
|
77
|
+
'["' +
|
78
|
+
val.fileId +
|
79
|
+
'","' +
|
80
|
+
val.indexId +
|
81
|
+
'",[' +
|
82
|
+
keyValue.join(",") +
|
83
|
+
"]]";
|
84
|
+
try {
|
85
|
+
e.view = "db_index";
|
86
|
+
const ret = await query_db(e, db, table_obj);
|
87
|
+
const json = ret.data;
|
88
|
+
|
89
|
+
// var data;
|
90
|
+
|
91
|
+
if (json.code > 0) {
|
92
|
+
var data = json.data;
|
93
|
+
if (data?.rows?.length) {
|
94
|
+
for await (var val of data.rows) {
|
95
|
+
if (val.id !== docP._id) {
|
96
|
+
found_unique = true;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
if (found_unique) {
|
100
|
+
throw "error checking unique:" + key;
|
85
101
|
}
|
86
|
-
}
|
87
|
-
if (found_unique) {
|
88
|
-
throw "error checking unique:" + key;
|
89
102
|
}
|
90
103
|
}
|
104
|
+
// throw json.data;
|
105
|
+
return { code: 1, data: "ok" };
|
106
|
+
} catch (msg) {
|
107
|
+
console.error(msg);
|
108
|
+
ret = { code: -22, data: msg };
|
109
|
+
break;
|
91
110
|
}
|
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
111
|
}
|
99
|
-
}
|
100
112
|
|
101
|
-
|
113
|
+
return ret;
|
114
|
+
};
|
115
|
+
return await local();
|
102
116
|
};
|
103
117
|
|
104
118
|
const get_index_json = async function (docInP, table_obj) {
|
@@ -1323,8 +1337,8 @@ export const create = async (params, resolve, reject) => {
|
|
1323
1337
|
error: {},
|
1324
1338
|
},
|
1325
1339
|
|
1326
|
-
ts:
|
1327
|
-
date:
|
1340
|
+
ts: Date.now(),
|
1341
|
+
date: Date.now(),
|
1328
1342
|
};
|
1329
1343
|
const index_ret = await get_index_json(doc, table_obj);
|
1330
1344
|
if (index_ret.code < 0) {
|
@@ -1461,7 +1475,7 @@ export const del = async (params, resolve, reject) => {
|
|
1461
1475
|
});
|
1462
1476
|
} else {
|
1463
1477
|
doc.stat = 4;
|
1464
|
-
doc.ts =
|
1478
|
+
doc.ts = Date.now();
|
1465
1479
|
docs_to_delete.push(doc);
|
1466
1480
|
}
|
1467
1481
|
}
|
@@ -1485,7 +1499,7 @@ export const restore = async (params, resolve, reject) => {
|
|
1485
1499
|
|
1486
1500
|
if (doc && doc._id) {
|
1487
1501
|
doc.stat = 3;
|
1488
|
-
doc.ts =
|
1502
|
+
doc.ts = Date.now();
|
1489
1503
|
docs_to_restore.push(doc);
|
1490
1504
|
}
|
1491
1505
|
}
|