namirasoft-node 1.4.53 → 1.4.55
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/dist/BaseDatabase.d.ts +1 -101
- package/dist/BaseDatabase.js +0 -112
- package/dist/BaseDatabase.js.map +1 -1
- package/dist/BaseFilterItemBuilder.d.ts +104 -0
- package/dist/BaseFilterItemBuilder.js +127 -0
- package/dist/BaseFilterItemBuilder.js.map +1 -0
- package/dist/BaseFilterItemBuilderDatabase.d.ts +9 -0
- package/dist/BaseFilterItemBuilderDatabase.js +20 -0
- package/dist/BaseFilterItemBuilderDatabase.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/BaseDatabase.ts +1 -157
- package/src/BaseFilterItemBuilder.ts +156 -0
- package/src/BaseFilterItemBuilderDatabase.ts +21 -0
- package/src/index.ts +2 -0
package/dist/BaseDatabase.d.ts
CHANGED
|
@@ -1,102 +1,5 @@
|
|
|
1
1
|
import * as express from "express";
|
|
2
|
-
import {
|
|
3
|
-
import { BaseTable } from "./BaseTable";
|
|
4
|
-
export interface BaseDatabase_FilterTable<WhereOptions> {
|
|
5
|
-
main: {
|
|
6
|
-
column: string;
|
|
7
|
-
};
|
|
8
|
-
secondary: {
|
|
9
|
-
column: string;
|
|
10
|
-
};
|
|
11
|
-
getExtraConditions?: (column: string) => WhereOptions[];
|
|
12
|
-
}
|
|
13
|
-
export interface IFilterableDatabase<WhereOptions> {
|
|
14
|
-
getIn: (column_name: string, not: boolean, values: string[]) => {
|
|
15
|
-
condition: WhereOptions;
|
|
16
|
-
partial: boolean;
|
|
17
|
-
independant?: {
|
|
18
|
-
not: boolean;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
getLike: (column_name: string, not: boolean, value: string) => {
|
|
22
|
-
condition: WhereOptions;
|
|
23
|
-
partial: boolean;
|
|
24
|
-
independant?: {
|
|
25
|
-
not: boolean;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
getRegex: (column_name: string, not: boolean, value: string) => {
|
|
29
|
-
condition: WhereOptions;
|
|
30
|
-
partial: boolean;
|
|
31
|
-
independant?: {
|
|
32
|
-
not: boolean;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
getEmpty: (column_name: string, not: boolean) => {
|
|
36
|
-
condition: WhereOptions;
|
|
37
|
-
partial: boolean;
|
|
38
|
-
independant?: {
|
|
39
|
-
not: boolean;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
getExists: (column_name: string, not: boolean) => {
|
|
43
|
-
condition: WhereOptions;
|
|
44
|
-
partial: boolean;
|
|
45
|
-
independant?: {
|
|
46
|
-
not: boolean;
|
|
47
|
-
};
|
|
48
|
-
};
|
|
49
|
-
getIncludes: (column_name: string, not: boolean, value: string[]) => {
|
|
50
|
-
condition: WhereOptions;
|
|
51
|
-
partial: boolean;
|
|
52
|
-
independant?: {
|
|
53
|
-
not: boolean;
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
getStartsWith: (column_name: string, not: boolean, value: string) => {
|
|
57
|
-
condition: WhereOptions;
|
|
58
|
-
partial: boolean;
|
|
59
|
-
independant?: {
|
|
60
|
-
not: boolean;
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
getEndsWith: (column_name: string, not: boolean, value: string) => {
|
|
64
|
-
condition: WhereOptions;
|
|
65
|
-
partial: boolean;
|
|
66
|
-
independant?: {
|
|
67
|
-
not: boolean;
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
getLT: (column_name: string, value: any) => {
|
|
71
|
-
condition: WhereOptions;
|
|
72
|
-
partial: boolean;
|
|
73
|
-
independant?: {
|
|
74
|
-
not: boolean;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
getLTE: (column_name: string, value: any) => {
|
|
78
|
-
condition: WhereOptions;
|
|
79
|
-
partial: boolean;
|
|
80
|
-
independant?: {
|
|
81
|
-
not: boolean;
|
|
82
|
-
};
|
|
83
|
-
};
|
|
84
|
-
getGT: (column_name: string, value: any) => {
|
|
85
|
-
condition: WhereOptions;
|
|
86
|
-
partial: boolean;
|
|
87
|
-
independant?: {
|
|
88
|
-
not: boolean;
|
|
89
|
-
};
|
|
90
|
-
};
|
|
91
|
-
getGTE: (column_name: string, value: any) => {
|
|
92
|
-
condition: WhereOptions;
|
|
93
|
-
partial: boolean;
|
|
94
|
-
independant?: {
|
|
95
|
-
not: boolean;
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
getInSelect: (t: BaseTable<BaseDatabase, any>, not: boolean, join: BaseDatabase_FilterTable<WhereOptions>, conditions: WhereOptions[]) => Promise<WhereOptions>;
|
|
99
|
-
}
|
|
2
|
+
import { SortItem } from "namirasoft-core";
|
|
100
3
|
export declare abstract class BaseDatabase {
|
|
101
4
|
private tables;
|
|
102
5
|
req?: express.Request;
|
|
@@ -112,8 +15,5 @@ export declare abstract class BaseDatabase {
|
|
|
112
15
|
offset: number;
|
|
113
16
|
limit: number;
|
|
114
17
|
};
|
|
115
|
-
protected _getFiltersConditions<WhereOptions>(table_main: BaseTable<BaseDatabase, any>, table_joins: {
|
|
116
|
-
[table: string]: BaseDatabase_FilterTable<WhereOptions>;
|
|
117
|
-
}, idatabase: IFilterableDatabase<WhereOptions>, filters?: FilterItem[] | undefined): Promise<WhereOptions[]>;
|
|
118
18
|
abstract getSortOptions(sorts?: SortItem[] | undefined): any;
|
|
119
19
|
}
|
package/dist/BaseDatabase.js
CHANGED
|
@@ -44,118 +44,6 @@ class BaseDatabase {
|
|
|
44
44
|
let limit = page_size;
|
|
45
45
|
return { offset, limit };
|
|
46
46
|
}
|
|
47
|
-
_getFiltersConditions(table_main, table_joins, idatabase, filters) {
|
|
48
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
-
var _a;
|
|
50
|
-
let ans = [];
|
|
51
|
-
if (filters) {
|
|
52
|
-
let conditions_in_select_main = {};
|
|
53
|
-
Object.keys(table_joins).forEach(table => { conditions_in_select_main[table] = []; });
|
|
54
|
-
let processed = {};
|
|
55
|
-
let getCondition_IDInSelect = (table, not, conditions) => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
let join = table_joins[table];
|
|
57
|
-
let t = this.getTable(table);
|
|
58
|
-
return idatabase.getInSelect(t, not, join, conditions);
|
|
59
|
-
});
|
|
60
|
-
for (let i = 0; i < filters.length; i++)
|
|
61
|
-
if (!processed[i]) {
|
|
62
|
-
const filter = filters[i];
|
|
63
|
-
let t = this.getTable(filter.table.name);
|
|
64
|
-
t.checkColumn(filter.column.name, false, null);
|
|
65
|
-
let join = table_joins[filter.table.name];
|
|
66
|
-
let is_table_main = table_main.getName() === filter.table.name;
|
|
67
|
-
let column_name = (_a = t.getRealColumnName(filter.column.name)) !== null && _a !== void 0 ? _a : filter.column.name;
|
|
68
|
-
let values = filter.values;
|
|
69
|
-
if (filter.operator.count > 0)
|
|
70
|
-
for (let j = i + 1; j < filters.length; j++) {
|
|
71
|
-
const f = filters[j];
|
|
72
|
-
if (filter.table.name == f.table.name)
|
|
73
|
-
if (filter.column.name == f.column.name)
|
|
74
|
-
if (filter.not == f.not)
|
|
75
|
-
if (filter.operator.sign == f.operator.sign) {
|
|
76
|
-
processed[j] = true;
|
|
77
|
-
values.push(...f.values);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
let getNumbers = () => {
|
|
81
|
-
let nums = values.map(x => parseFloat(x));
|
|
82
|
-
if (nums.filter(x => isNaN(x)).length > 0)
|
|
83
|
-
namirasoft_core_1.ErrorOperation.throwHTTP(400, `Invalid number values for: '${values.join(",")}'`);
|
|
84
|
-
return nums;
|
|
85
|
-
};
|
|
86
|
-
let addCondition = (res) => __awaiter(this, void 0, void 0, function* () {
|
|
87
|
-
var _a, _b, _c, _d;
|
|
88
|
-
let condition;
|
|
89
|
-
if (res.partial) {
|
|
90
|
-
let wh = {};
|
|
91
|
-
wh[column_name] = res.condition;
|
|
92
|
-
condition = wh;
|
|
93
|
-
}
|
|
94
|
-
else
|
|
95
|
-
condition = res.condition;
|
|
96
|
-
if (is_table_main)
|
|
97
|
-
ans.push(condition);
|
|
98
|
-
else {
|
|
99
|
-
if (res.independant || join.getExtraConditions)
|
|
100
|
-
ans.push(yield getCondition_IDInSelect(filter.table.name, (_b = (_a = res.independant) === null || _a === void 0 ? void 0 : _a.not) !== null && _b !== void 0 ? _b : false, [condition, ...((_d = (_c = join.getExtraConditions) === null || _c === void 0 ? void 0 : _c.call(join, filter.column.name)) !== null && _d !== void 0 ? _d : [])]));
|
|
101
|
-
else
|
|
102
|
-
conditions_in_select_main[filter.table.name].push(condition);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
if (filter.operator == namirasoft_core_1.FilterItemOperator.all.equals)
|
|
106
|
-
yield addCondition(idatabase.getIn(column_name, filter.not, values));
|
|
107
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.contains)
|
|
108
|
-
for (const value of values)
|
|
109
|
-
yield addCondition(idatabase.getLike(column_name, filter.not, value));
|
|
110
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.regex)
|
|
111
|
-
for (const value of values)
|
|
112
|
-
yield addCondition(idatabase.getRegex(column_name, filter.not, value));
|
|
113
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.empty)
|
|
114
|
-
yield addCondition(idatabase.getEmpty(column_name, filter.not));
|
|
115
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.exists)
|
|
116
|
-
yield addCondition(idatabase.getExists(column_name, filter.not));
|
|
117
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.includes)
|
|
118
|
-
yield addCondition(idatabase.getIncludes(column_name, filter.not, values));
|
|
119
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.startswith)
|
|
120
|
-
for (const value of values)
|
|
121
|
-
yield addCondition(idatabase.getStartsWith(column_name, filter.not, value));
|
|
122
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.endswith)
|
|
123
|
-
for (const value of values)
|
|
124
|
-
yield addCondition(idatabase.getEndsWith(column_name, filter.not, value));
|
|
125
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.lessthan) {
|
|
126
|
-
if (filter.not)
|
|
127
|
-
yield addCondition(idatabase.getGTE(column_name, Math.max(...getNumbers())));
|
|
128
|
-
else
|
|
129
|
-
yield addCondition(idatabase.getLT(column_name, Math.max(...getNumbers())));
|
|
130
|
-
}
|
|
131
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.lessthanequal) {
|
|
132
|
-
if (filter.not)
|
|
133
|
-
yield addCondition(idatabase.getGT(column_name, Math.max(...getNumbers())));
|
|
134
|
-
else
|
|
135
|
-
yield addCondition(idatabase.getLTE(column_name, Math.max(...getNumbers())));
|
|
136
|
-
}
|
|
137
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.morethan) {
|
|
138
|
-
if (filter.not)
|
|
139
|
-
yield addCondition(idatabase.getLTE(column_name, Math.max(...getNumbers())));
|
|
140
|
-
else
|
|
141
|
-
yield addCondition(idatabase.getGT(column_name, Math.max(...getNumbers())));
|
|
142
|
-
}
|
|
143
|
-
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.morethanequal) {
|
|
144
|
-
if (filter.not)
|
|
145
|
-
yield addCondition(idatabase.getLT(column_name, Math.max(...getNumbers())));
|
|
146
|
-
else
|
|
147
|
-
yield addCondition(idatabase.getGTE(column_name, Math.max(...getNumbers())));
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
for (let table of Object.keys(conditions_in_select_main)) {
|
|
151
|
-
let conditions = conditions_in_select_main[table];
|
|
152
|
-
if (conditions.length > 0)
|
|
153
|
-
ans.push(yield getCondition_IDInSelect(table, false, conditions));
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return ans;
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
47
|
}
|
|
160
48
|
exports.BaseDatabase = BaseDatabase;
|
|
161
49
|
//# sourceMappingURL=BaseDatabase.js.map
|
package/dist/BaseDatabase.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDatabase.js","sourceRoot":"","sources":["../src/BaseDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"BaseDatabase.js","sourceRoot":"","sources":["../src/BaseDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,qDAA2D;AAE3D,MAAsB,YAAY;IAAlC;QAEY,WAAM,GAA4B,EAAE,CAAC;IAwCjD,CAAC;IAlCS,UAAU;;QAEhB,CAAC;KAAA;IACK,SAAS;;QAEf,CAAC;KAAA;IACD,QAAQ,CAAC,IAAY,EAAE,KAAU;QAE7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;IACD,QAAQ,CAAI,IAAY;QAEpB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAM,CAAC;QACjC,IAAI,CAAC,GAAG;YACJ,gCAAc,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,IAAI,aAAa,CAAC,CAAC;QAC/D,OAAO,GAAG,CAAC;IACf,CAAC;IACD,QAAQ,CAAC,WAAmB,EAAE,SAAiB,EAAE,iBAA0B;QAGvE,IAAI,KAAK,CAAC,WAAW,CAAC;YAClB,WAAW,GAAG,CAAC,CAAC;QAEpB,IAAI,KAAK,CAAC,SAAS,CAAC;YAChB,IAAI,iBAAiB;gBACjB,SAAS,GAAG,iBAAiB,CAAC;QACtC,IAAI,KAAK,CAAC,SAAS,CAAC;YAChB,SAAS,GAAG,EAAE,CAAC;QAEnB,IAAI,MAAM,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;QAC3C,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;CAEJ;AA1CD,oCA0CC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { FilterItem } from "namirasoft-core";
|
|
2
|
+
export interface BaseFilterItemBuilder_JoinTable<WhereOptions> {
|
|
3
|
+
main: {
|
|
4
|
+
column: string;
|
|
5
|
+
};
|
|
6
|
+
secondary: {
|
|
7
|
+
column: string;
|
|
8
|
+
};
|
|
9
|
+
getExtraConditions?: (column: string) => WhereOptions[];
|
|
10
|
+
}
|
|
11
|
+
export declare abstract class BaseFilterItemBuilder<Table extends {
|
|
12
|
+
getName: () => string;
|
|
13
|
+
}, WhereOptions> {
|
|
14
|
+
build(table_main: Table, table_joins: {
|
|
15
|
+
[table: string]: BaseFilterItemBuilder_JoinTable<WhereOptions>;
|
|
16
|
+
}, filters?: FilterItem[] | undefined): Promise<WhereOptions[]>;
|
|
17
|
+
abstract checkColumn(table_name: string, column_name: string): void;
|
|
18
|
+
abstract getRealColumnName(table_name: string, column_name: string): string;
|
|
19
|
+
abstract getIn(column_name: string, not: boolean, values: string[]): {
|
|
20
|
+
condition: WhereOptions;
|
|
21
|
+
partial: boolean;
|
|
22
|
+
independant?: {
|
|
23
|
+
not: boolean;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
abstract getLike(column_name: string, not: boolean, value: string): {
|
|
27
|
+
condition: WhereOptions;
|
|
28
|
+
partial: boolean;
|
|
29
|
+
independant?: {
|
|
30
|
+
not: boolean;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
abstract getRegex(column_name: string, not: boolean, value: string): {
|
|
34
|
+
condition: WhereOptions;
|
|
35
|
+
partial: boolean;
|
|
36
|
+
independant?: {
|
|
37
|
+
not: boolean;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
abstract getEmpty(column_name: string, not: boolean): {
|
|
41
|
+
condition: WhereOptions;
|
|
42
|
+
partial: boolean;
|
|
43
|
+
independant?: {
|
|
44
|
+
not: boolean;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
abstract getExists(column_name: string, not: boolean): {
|
|
48
|
+
condition: WhereOptions;
|
|
49
|
+
partial: boolean;
|
|
50
|
+
independant?: {
|
|
51
|
+
not: boolean;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
abstract getIncludes(column_name: string, not: boolean, value: string[]): {
|
|
55
|
+
condition: WhereOptions;
|
|
56
|
+
partial: boolean;
|
|
57
|
+
independant?: {
|
|
58
|
+
not: boolean;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
abstract getStartsWith(column_name: string, not: boolean, value: string): {
|
|
62
|
+
condition: WhereOptions;
|
|
63
|
+
partial: boolean;
|
|
64
|
+
independant?: {
|
|
65
|
+
not: boolean;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
abstract getEndsWith(column_name: string, not: boolean, value: string): {
|
|
69
|
+
condition: WhereOptions;
|
|
70
|
+
partial: boolean;
|
|
71
|
+
independant?: {
|
|
72
|
+
not: boolean;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
abstract getLT(column_name: string, value: any): {
|
|
76
|
+
condition: WhereOptions;
|
|
77
|
+
partial: boolean;
|
|
78
|
+
independant?: {
|
|
79
|
+
not: boolean;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
abstract getLTE(column_name: string, value: any): {
|
|
83
|
+
condition: WhereOptions;
|
|
84
|
+
partial: boolean;
|
|
85
|
+
independant?: {
|
|
86
|
+
not: boolean;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
abstract getGT(column_name: string, value: any): {
|
|
90
|
+
condition: WhereOptions;
|
|
91
|
+
partial: boolean;
|
|
92
|
+
independant?: {
|
|
93
|
+
not: boolean;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
abstract getGTE(column_name: string, value: any): {
|
|
97
|
+
condition: WhereOptions;
|
|
98
|
+
partial: boolean;
|
|
99
|
+
independant?: {
|
|
100
|
+
not: boolean;
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
abstract getInSelect(table: string, not: boolean, join: BaseFilterItemBuilder_JoinTable<WhereOptions>, conditions: WhereOptions[]): Promise<WhereOptions>;
|
|
104
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.BaseFilterItemBuilder = void 0;
|
|
13
|
+
const namirasoft_core_1 = require("namirasoft-core");
|
|
14
|
+
class BaseFilterItemBuilder {
|
|
15
|
+
build(table_main, table_joins, filters) {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
var _a;
|
|
18
|
+
let ans = [];
|
|
19
|
+
if (filters) {
|
|
20
|
+
let conditions_in_select_main = {};
|
|
21
|
+
Object.keys(table_joins).forEach(table => { conditions_in_select_main[table] = []; });
|
|
22
|
+
let processed = {};
|
|
23
|
+
let getCondition_IDInSelect = (table, not, conditions) => __awaiter(this, void 0, void 0, function* () {
|
|
24
|
+
let join = table_joins[table];
|
|
25
|
+
return this.getInSelect(table, not, join, conditions);
|
|
26
|
+
});
|
|
27
|
+
for (let i = 0; i < filters.length; i++)
|
|
28
|
+
if (!processed[i]) {
|
|
29
|
+
const filter = filters[i];
|
|
30
|
+
this.checkColumn(filter.table.name, filter.column.name);
|
|
31
|
+
let join = table_joins[filter.table.name];
|
|
32
|
+
let is_table_main = table_main.getName() === filter.table.name;
|
|
33
|
+
let column_name = (_a = this.getRealColumnName(filter.table.name, filter.column.name)) !== null && _a !== void 0 ? _a : filter.column.name;
|
|
34
|
+
let values = filter.values;
|
|
35
|
+
if (filter.operator.count > 0)
|
|
36
|
+
for (let j = i + 1; j < filters.length; j++) {
|
|
37
|
+
const f = filters[j];
|
|
38
|
+
if (filter.table.name == f.table.name)
|
|
39
|
+
if (filter.column.name == f.column.name)
|
|
40
|
+
if (filter.not == f.not)
|
|
41
|
+
if (filter.operator.sign == f.operator.sign) {
|
|
42
|
+
processed[j] = true;
|
|
43
|
+
values.push(...f.values);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
let getNumbers = () => {
|
|
47
|
+
let nums = values.map(x => parseFloat(x));
|
|
48
|
+
if (nums.filter(x => isNaN(x)).length > 0)
|
|
49
|
+
namirasoft_core_1.ErrorOperation.throwHTTP(400, `Invalid number values for: '${values.join(",")}'`);
|
|
50
|
+
return nums;
|
|
51
|
+
};
|
|
52
|
+
let addCondition = (res) => __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
var _a, _b, _c, _d;
|
|
54
|
+
let condition;
|
|
55
|
+
if (res.partial) {
|
|
56
|
+
let wh = {};
|
|
57
|
+
wh[column_name] = res.condition;
|
|
58
|
+
condition = wh;
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
condition = res.condition;
|
|
62
|
+
if (is_table_main)
|
|
63
|
+
ans.push(condition);
|
|
64
|
+
else {
|
|
65
|
+
if (res.independant || join.getExtraConditions)
|
|
66
|
+
ans.push(yield getCondition_IDInSelect(filter.table.name, (_b = (_a = res.independant) === null || _a === void 0 ? void 0 : _a.not) !== null && _b !== void 0 ? _b : false, [condition, ...((_d = (_c = join.getExtraConditions) === null || _c === void 0 ? void 0 : _c.call(join, filter.column.name)) !== null && _d !== void 0 ? _d : [])]));
|
|
67
|
+
else
|
|
68
|
+
conditions_in_select_main[filter.table.name].push(condition);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
if (filter.operator == namirasoft_core_1.FilterItemOperator.all.equals)
|
|
72
|
+
yield addCondition(this.getIn(column_name, filter.not, values));
|
|
73
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.contains)
|
|
74
|
+
for (const value of values)
|
|
75
|
+
yield addCondition(this.getLike(column_name, filter.not, value));
|
|
76
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.regex)
|
|
77
|
+
for (const value of values)
|
|
78
|
+
yield addCondition(this.getRegex(column_name, filter.not, value));
|
|
79
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.empty)
|
|
80
|
+
yield addCondition(this.getEmpty(column_name, filter.not));
|
|
81
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.exists)
|
|
82
|
+
yield addCondition(this.getExists(column_name, filter.not));
|
|
83
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.includes)
|
|
84
|
+
yield addCondition(this.getIncludes(column_name, filter.not, values));
|
|
85
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.startswith)
|
|
86
|
+
for (const value of values)
|
|
87
|
+
yield addCondition(this.getStartsWith(column_name, filter.not, value));
|
|
88
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.endswith)
|
|
89
|
+
for (const value of values)
|
|
90
|
+
yield addCondition(this.getEndsWith(column_name, filter.not, value));
|
|
91
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.lessthan) {
|
|
92
|
+
if (filter.not)
|
|
93
|
+
yield addCondition(this.getGTE(column_name, Math.max(...getNumbers())));
|
|
94
|
+
else
|
|
95
|
+
yield addCondition(this.getLT(column_name, Math.max(...getNumbers())));
|
|
96
|
+
}
|
|
97
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.lessthanequal) {
|
|
98
|
+
if (filter.not)
|
|
99
|
+
yield addCondition(this.getGT(column_name, Math.max(...getNumbers())));
|
|
100
|
+
else
|
|
101
|
+
yield addCondition(this.getLTE(column_name, Math.max(...getNumbers())));
|
|
102
|
+
}
|
|
103
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.morethan) {
|
|
104
|
+
if (filter.not)
|
|
105
|
+
yield addCondition(this.getLTE(column_name, Math.max(...getNumbers())));
|
|
106
|
+
else
|
|
107
|
+
yield addCondition(this.getGT(column_name, Math.max(...getNumbers())));
|
|
108
|
+
}
|
|
109
|
+
else if (filter.operator == namirasoft_core_1.FilterItemOperator.all.morethanequal) {
|
|
110
|
+
if (filter.not)
|
|
111
|
+
yield addCondition(this.getLT(column_name, Math.max(...getNumbers())));
|
|
112
|
+
else
|
|
113
|
+
yield addCondition(this.getGTE(column_name, Math.max(...getNumbers())));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (let table of Object.keys(conditions_in_select_main)) {
|
|
117
|
+
let conditions = conditions_in_select_main[table];
|
|
118
|
+
if (conditions.length > 0)
|
|
119
|
+
ans.push(yield getCondition_IDInSelect(table, false, conditions));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return ans;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.BaseFilterItemBuilder = BaseFilterItemBuilder;
|
|
127
|
+
//# sourceMappingURL=BaseFilterItemBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseFilterItemBuilder.js","sourceRoot":"","sources":["../src/BaseFilterItemBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseTable } from "./BaseTable";
|
|
2
|
+
import { BaseDatabase } from "./BaseDatabase";
|
|
3
|
+
import { BaseFilterItemBuilder } from "./BaseFilterItemBuilder";
|
|
4
|
+
export declare abstract class BaseFilterItemBuilderDatabase<WhereOptions> extends BaseFilterItemBuilder<BaseTable<BaseDatabase, any>, WhereOptions> {
|
|
5
|
+
database: BaseDatabase;
|
|
6
|
+
constructor(database: BaseDatabase);
|
|
7
|
+
checkColumn(table_name: string, column_name: string): void;
|
|
8
|
+
getRealColumnName(table_name: string, column_name: string): string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseFilterItemBuilderDatabase = void 0;
|
|
4
|
+
const BaseFilterItemBuilder_1 = require("./BaseFilterItemBuilder");
|
|
5
|
+
class BaseFilterItemBuilderDatabase extends BaseFilterItemBuilder_1.BaseFilterItemBuilder {
|
|
6
|
+
constructor(database) {
|
|
7
|
+
super();
|
|
8
|
+
this.database = database;
|
|
9
|
+
}
|
|
10
|
+
checkColumn(table_name, column_name) {
|
|
11
|
+
let t = this.database.getTable(table_name);
|
|
12
|
+
t.checkColumn(column_name, false, null);
|
|
13
|
+
}
|
|
14
|
+
getRealColumnName(table_name, column_name) {
|
|
15
|
+
let t = this.database.getTable(table_name);
|
|
16
|
+
return t.getRealColumnName(column_name);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.BaseFilterItemBuilderDatabase = BaseFilterItemBuilderDatabase;
|
|
20
|
+
//# sourceMappingURL=BaseFilterItemBuilderDatabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseFilterItemBuilderDatabase.js","sourceRoot":"","sources":["../src/BaseFilterItemBuilderDatabase.ts"],"names":[],"mappings":";;;AAEA,mEAAgE;AAEhE,MAAsB,6BAA4C,SAAQ,6CAAiE;IAEvI,YAAmB,QAAsB;QAErC,KAAK,EAAE,CAAC;QAFO,aAAQ,GAAR,QAAQ,CAAc;IAGzC,CAAC;IACM,WAAW,CAAC,UAAkB,EAAE,WAAmB;QAEtD,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAA+B,UAAU,CAAC,CAAC;QACzE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IACM,iBAAiB,CAAC,UAAkB,EAAE,WAAmB;QAE5D,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAA+B,UAAU,CAAC,CAAC;QACzE,OAAO,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;CACJ;AAhBD,sEAgBC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export * from "./BaseController";
|
|
|
5
5
|
export * from "./BaseCron";
|
|
6
6
|
export * from "./BaseDatabase";
|
|
7
7
|
export * from "./BaseEmailService";
|
|
8
|
+
export * from "./BaseFilterItemBuilder";
|
|
9
|
+
export * from "./BaseFilterItemBuilderDatabase";
|
|
8
10
|
export * from "./BaseTable";
|
|
9
11
|
export * from "./CommandOperation";
|
|
10
12
|
export * from "./EmptyDatabase";
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,8 @@ __exportStar(require("./BaseController"), exports);
|
|
|
21
21
|
__exportStar(require("./BaseCron"), exports);
|
|
22
22
|
__exportStar(require("./BaseDatabase"), exports);
|
|
23
23
|
__exportStar(require("./BaseEmailService"), exports);
|
|
24
|
+
__exportStar(require("./BaseFilterItemBuilder"), exports);
|
|
25
|
+
__exportStar(require("./BaseFilterItemBuilderDatabase"), exports);
|
|
24
26
|
__exportStar(require("./BaseTable"), exports);
|
|
25
27
|
__exportStar(require("./CommandOperation"), exports);
|
|
26
28
|
__exportStar(require("./EmptyDatabase"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,oDAAkC;AAClC,wDAAsC;AACtC,mDAAiC;AACjC,6CAA2B;AAC3B,iDAA+B;AAC/B,qDAAmC;AACnC,8CAA4B;AAC5B,qDAAmC;AACnC,kDAAgC;AAChC,iDAA+B;AAC/B,gDAA8B;AAC9B,yCAAuB;AACvB,iDAA+B;AAC/B,yDAAuC;AACvC,4DAA0C;AAC1C,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,oDAAkC;AAClC,wDAAsC;AACtC,mDAAiC;AACjC,6CAA2B;AAC3B,iDAA+B;AAC/B,qDAAmC;AACnC,0DAAwC;AACxC,kEAAgD;AAChD,8CAA4B;AAC5B,qDAAmC;AACnC,kDAAgC;AAChC,iDAA+B;AAC/B,gDAA8B;AAC9B,yCAAuB;AACvB,iDAA+B;AAC/B,yDAAuC;AACvC,4DAA0C;AAC1C,gDAA8B"}
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"framework": "npm",
|
|
9
9
|
"application": "package",
|
|
10
10
|
"private": false,
|
|
11
|
-
"version": "1.4.
|
|
11
|
+
"version": "1.4.55",
|
|
12
12
|
"author": "Amir Abolhasani",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"main": "./dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@supercharge/request-ip": "^1.2.0",
|
|
21
21
|
"@types/cors": "^2.8.17",
|
|
22
22
|
"@types/express": "^5.0.0",
|
|
23
|
-
"@types/node": "^22.10.
|
|
23
|
+
"@types/node": "^22.10.7",
|
|
24
24
|
"@types/node-cron": "^3.0.11",
|
|
25
25
|
"@types/nodemailer": "^6.4.17",
|
|
26
26
|
"@types/nodemailer-smtp-transport": "^2.7.8",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"express": "^4.21.2",
|
|
32
32
|
"joi": "^17.13.3",
|
|
33
33
|
"namirasoft-core": "^1.4.42",
|
|
34
|
-
"namirasoft-log": "^1.4.
|
|
34
|
+
"namirasoft-log": "^1.4.16",
|
|
35
35
|
"namirasoft-schema": "^1.4.22",
|
|
36
36
|
"node-cron": "^3.0.3",
|
|
37
37
|
"nodemailer": "^6.9.16",
|
package/src/BaseDatabase.ts
CHANGED
|
@@ -1,34 +1,5 @@
|
|
|
1
1
|
import * as express from "express";
|
|
2
|
-
import { ErrorOperation,
|
|
3
|
-
import { BaseTable } from "./BaseTable";
|
|
4
|
-
|
|
5
|
-
export interface BaseDatabase_FilterTable<WhereOptions>
|
|
6
|
-
{
|
|
7
|
-
main: {
|
|
8
|
-
column: string;
|
|
9
|
-
};
|
|
10
|
-
secondary: {
|
|
11
|
-
column: string;
|
|
12
|
-
};
|
|
13
|
-
getExtraConditions?: (column: string) => WhereOptions[];
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface IFilterableDatabase<WhereOptions>
|
|
17
|
-
{
|
|
18
|
-
getIn: (column_name: string, not: boolean, values: string[]) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
19
|
-
getLike: (column_name: string, not: boolean, value: string) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
20
|
-
getRegex: (column_name: string, not: boolean, value: string) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
21
|
-
getEmpty: (column_name: string, not: boolean) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
22
|
-
getExists: (column_name: string, not: boolean) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
23
|
-
getIncludes: (column_name: string, not: boolean, value: string[]) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
24
|
-
getStartsWith: (column_name: string, not: boolean, value: string) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
25
|
-
getEndsWith: (column_name: string, not: boolean, value: string) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
26
|
-
getLT: (column_name: string, value: any) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
27
|
-
getLTE: (column_name: string, value: any) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
28
|
-
getGT: (column_name: string, value: any) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
29
|
-
getGTE: (column_name: string, value: any) => { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
30
|
-
getInSelect: (t: BaseTable<BaseDatabase, any>, not: boolean, join: BaseDatabase_FilterTable<WhereOptions>, conditions: WhereOptions[]) => Promise<WhereOptions>;
|
|
31
|
-
}
|
|
2
|
+
import { ErrorOperation, SortItem } from "namirasoft-core";
|
|
32
3
|
|
|
33
4
|
export abstract class BaseDatabase
|
|
34
5
|
{
|
|
@@ -71,132 +42,5 @@ export abstract class BaseDatabase
|
|
|
71
42
|
let limit = page_size;
|
|
72
43
|
return { offset, limit };
|
|
73
44
|
}
|
|
74
|
-
protected async _getFiltersConditions<WhereOptions>(table_main: BaseTable<BaseDatabase, any>, table_joins: { [table: string]: BaseDatabase_FilterTable<WhereOptions> }, idatabase: IFilterableDatabase<WhereOptions>, filters?: FilterItem[] | undefined): Promise<WhereOptions[]>
|
|
75
|
-
{
|
|
76
|
-
let ans: WhereOptions[] = [];
|
|
77
|
-
if (filters)
|
|
78
|
-
{
|
|
79
|
-
let conditions_in_select_main: { [table: string]: WhereOptions[] } = {};
|
|
80
|
-
Object.keys(table_joins).forEach(table => { conditions_in_select_main[table] = []; });
|
|
81
|
-
let processed: { [index: number]: boolean } = {};
|
|
82
|
-
|
|
83
|
-
let getCondition_IDInSelect = async (table: string, not: boolean, conditions: WhereOptions[]): Promise<WhereOptions> =>
|
|
84
|
-
{
|
|
85
|
-
let join = table_joins[table];
|
|
86
|
-
let t: BaseTable<BaseDatabase, any> = this.getTable<BaseTable<BaseDatabase, any>>(table);
|
|
87
|
-
return idatabase.getInSelect(t, not, join, conditions);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
for (let i = 0; i < filters.length; i++)
|
|
91
|
-
if (!processed[i])
|
|
92
|
-
{
|
|
93
|
-
const filter = filters[i];
|
|
94
|
-
let t = this.getTable<BaseTable<BaseDatabase, any>>(filter.table.name);
|
|
95
|
-
t.checkColumn(filter.column.name, false, null);
|
|
96
|
-
let join = table_joins[filter.table.name];
|
|
97
|
-
let is_table_main = table_main.getName() === filter.table.name;
|
|
98
|
-
let column_name = t.getRealColumnName(filter.column.name) ?? filter.column.name;
|
|
99
|
-
|
|
100
|
-
let values = filter.values;
|
|
101
|
-
if (filter.operator.count > 0)
|
|
102
|
-
for (let j = i + 1; j < filters.length; j++)
|
|
103
|
-
{
|
|
104
|
-
const f = filters[j];
|
|
105
|
-
if (filter.table.name == f.table.name)
|
|
106
|
-
if (filter.column.name == f.column.name)
|
|
107
|
-
if (filter.not == f.not)
|
|
108
|
-
if (filter.operator.sign == f.operator.sign)
|
|
109
|
-
{
|
|
110
|
-
processed[j] = true;
|
|
111
|
-
values.push(...f.values);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
let getNumbers = () =>
|
|
116
|
-
{
|
|
117
|
-
let nums: number[] = values.map(x => parseFloat(x));
|
|
118
|
-
if (nums.filter(x => isNaN(x)).length > 0)
|
|
119
|
-
ErrorOperation.throwHTTP(400, `Invalid number values for: '${values.join(",")}'`);
|
|
120
|
-
return nums;
|
|
121
|
-
};
|
|
122
|
-
let addCondition = async (res: { condition: WhereOptions, partial: boolean, independant?: { not: boolean } }) =>
|
|
123
|
-
{
|
|
124
|
-
let condition: WhereOptions;
|
|
125
|
-
if (res.partial)
|
|
126
|
-
{
|
|
127
|
-
let wh: any = {};
|
|
128
|
-
wh[column_name] = res.condition;
|
|
129
|
-
condition = wh;
|
|
130
|
-
}
|
|
131
|
-
else
|
|
132
|
-
condition = res.condition;
|
|
133
|
-
if (is_table_main)
|
|
134
|
-
ans.push(condition);
|
|
135
|
-
else
|
|
136
|
-
{
|
|
137
|
-
if (res.independant || join.getExtraConditions)
|
|
138
|
-
ans.push(await getCondition_IDInSelect(filter.table.name, res.independant?.not ?? false, [condition, ...(join.getExtraConditions?.(filter.column.name) ?? [])]));
|
|
139
|
-
else
|
|
140
|
-
conditions_in_select_main[filter.table.name].push(condition);
|
|
141
|
-
}
|
|
142
|
-
};
|
|
143
|
-
if (filter.operator == FilterItemOperator.all.equals)
|
|
144
|
-
await addCondition(idatabase.getIn(column_name, filter.not, values));
|
|
145
|
-
else if (filter.operator == FilterItemOperator.all.contains)
|
|
146
|
-
for (const value of values)
|
|
147
|
-
await addCondition(idatabase.getLike(column_name, filter.not, value));
|
|
148
|
-
else if (filter.operator == FilterItemOperator.all.regex)
|
|
149
|
-
for (const value of values)
|
|
150
|
-
await addCondition(idatabase.getRegex(column_name, filter.not, value));
|
|
151
|
-
else if (filter.operator == FilterItemOperator.all.empty)
|
|
152
|
-
await addCondition(idatabase.getEmpty(column_name, filter.not));
|
|
153
|
-
else if (filter.operator == FilterItemOperator.all.exists)
|
|
154
|
-
await addCondition(idatabase.getExists(column_name, filter.not));
|
|
155
|
-
else if (filter.operator == FilterItemOperator.all.includes)
|
|
156
|
-
await addCondition(idatabase.getIncludes(column_name, filter.not, values));
|
|
157
|
-
else if (filter.operator == FilterItemOperator.all.startswith)
|
|
158
|
-
for (const value of values)
|
|
159
|
-
await addCondition(idatabase.getStartsWith(column_name, filter.not, value));
|
|
160
|
-
else if (filter.operator == FilterItemOperator.all.endswith)
|
|
161
|
-
for (const value of values)
|
|
162
|
-
await addCondition(idatabase.getEndsWith(column_name, filter.not, value));
|
|
163
|
-
else if (filter.operator == FilterItemOperator.all.lessthan)
|
|
164
|
-
{
|
|
165
|
-
if (filter.not)
|
|
166
|
-
await addCondition(idatabase.getGTE(column_name, Math.max(...getNumbers())));
|
|
167
|
-
else
|
|
168
|
-
await addCondition(idatabase.getLT(column_name, Math.max(...getNumbers())));
|
|
169
|
-
}
|
|
170
|
-
else if (filter.operator == FilterItemOperator.all.lessthanequal)
|
|
171
|
-
{
|
|
172
|
-
if (filter.not)
|
|
173
|
-
await addCondition(idatabase.getGT(column_name, Math.max(...getNumbers())));
|
|
174
|
-
else
|
|
175
|
-
await addCondition(idatabase.getLTE(column_name, Math.max(...getNumbers())));
|
|
176
|
-
}
|
|
177
|
-
else if (filter.operator == FilterItemOperator.all.morethan)
|
|
178
|
-
{
|
|
179
|
-
if (filter.not)
|
|
180
|
-
await addCondition(idatabase.getLTE(column_name, Math.max(...getNumbers())));
|
|
181
|
-
else
|
|
182
|
-
await addCondition(idatabase.getGT(column_name, Math.max(...getNumbers())));
|
|
183
|
-
}
|
|
184
|
-
else if (filter.operator == FilterItemOperator.all.morethanequal)
|
|
185
|
-
{
|
|
186
|
-
if (filter.not)
|
|
187
|
-
await addCondition(idatabase.getLT(column_name, Math.max(...getNumbers())));
|
|
188
|
-
else
|
|
189
|
-
await addCondition(idatabase.getGTE(column_name, Math.max(...getNumbers())));
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
for (let table of Object.keys(conditions_in_select_main))
|
|
193
|
-
{
|
|
194
|
-
let conditions = conditions_in_select_main[table];
|
|
195
|
-
if (conditions.length > 0)
|
|
196
|
-
ans.push(await getCondition_IDInSelect(table, false, conditions));
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
return ans;
|
|
200
|
-
}
|
|
201
45
|
public abstract getSortOptions(sorts?: SortItem[] | undefined): any;
|
|
202
46
|
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { ErrorOperation, FilterItem, FilterItemOperator } from "namirasoft-core";
|
|
2
|
+
|
|
3
|
+
export interface BaseFilterItemBuilder_JoinTable<WhereOptions>
|
|
4
|
+
{
|
|
5
|
+
main: {
|
|
6
|
+
column: string;
|
|
7
|
+
};
|
|
8
|
+
secondary: {
|
|
9
|
+
column: string;
|
|
10
|
+
};
|
|
11
|
+
getExtraConditions?: (column: string) => WhereOptions[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export abstract class BaseFilterItemBuilder<Table extends { getName: () => string; }, WhereOptions>
|
|
15
|
+
{
|
|
16
|
+
public async build(table_main: Table, table_joins: { [table: string]: BaseFilterItemBuilder_JoinTable<WhereOptions> }, filters?: FilterItem[] | undefined): Promise<WhereOptions[]>
|
|
17
|
+
{
|
|
18
|
+
let ans: WhereOptions[] = [];
|
|
19
|
+
if (filters)
|
|
20
|
+
{
|
|
21
|
+
let conditions_in_select_main: { [table: string]: WhereOptions[] } = {};
|
|
22
|
+
Object.keys(table_joins).forEach(table => { conditions_in_select_main[table] = []; });
|
|
23
|
+
let processed: { [index: number]: boolean } = {};
|
|
24
|
+
|
|
25
|
+
let getCondition_IDInSelect = async (table: string, not: boolean, conditions: WhereOptions[]): Promise<WhereOptions> =>
|
|
26
|
+
{
|
|
27
|
+
let join = table_joins[table];
|
|
28
|
+
return this.getInSelect(table, not, join, conditions);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
for (let i = 0; i < filters.length; i++)
|
|
32
|
+
if (!processed[i])
|
|
33
|
+
{
|
|
34
|
+
const filter = filters[i];
|
|
35
|
+
this.checkColumn(filter.table.name, filter.column.name);
|
|
36
|
+
let join = table_joins[filter.table.name];
|
|
37
|
+
let is_table_main = table_main.getName() === filter.table.name;
|
|
38
|
+
let column_name = this.getRealColumnName(filter.table.name, filter.column.name) ?? filter.column.name;
|
|
39
|
+
|
|
40
|
+
let values = filter.values;
|
|
41
|
+
if (filter.operator.count > 0)
|
|
42
|
+
for (let j = i + 1; j < filters.length; j++)
|
|
43
|
+
{
|
|
44
|
+
const f = filters[j];
|
|
45
|
+
if (filter.table.name == f.table.name)
|
|
46
|
+
if (filter.column.name == f.column.name)
|
|
47
|
+
if (filter.not == f.not)
|
|
48
|
+
if (filter.operator.sign == f.operator.sign)
|
|
49
|
+
{
|
|
50
|
+
processed[j] = true;
|
|
51
|
+
values.push(...f.values);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
let getNumbers = () =>
|
|
56
|
+
{
|
|
57
|
+
let nums: number[] = values.map(x => parseFloat(x));
|
|
58
|
+
if (nums.filter(x => isNaN(x)).length > 0)
|
|
59
|
+
ErrorOperation.throwHTTP(400, `Invalid number values for: '${values.join(",")}'`);
|
|
60
|
+
return nums;
|
|
61
|
+
};
|
|
62
|
+
let addCondition = async (res: { condition: WhereOptions, partial: boolean, independant?: { not: boolean } }) =>
|
|
63
|
+
{
|
|
64
|
+
let condition: WhereOptions;
|
|
65
|
+
if (res.partial)
|
|
66
|
+
{
|
|
67
|
+
let wh: any = {};
|
|
68
|
+
wh[column_name] = res.condition;
|
|
69
|
+
condition = wh;
|
|
70
|
+
}
|
|
71
|
+
else
|
|
72
|
+
condition = res.condition;
|
|
73
|
+
if (is_table_main)
|
|
74
|
+
ans.push(condition);
|
|
75
|
+
else
|
|
76
|
+
{
|
|
77
|
+
if (res.independant || join.getExtraConditions)
|
|
78
|
+
ans.push(await getCondition_IDInSelect(filter.table.name, res.independant?.not ?? false, [condition, ...(join.getExtraConditions?.(filter.column.name) ?? [])]));
|
|
79
|
+
else
|
|
80
|
+
conditions_in_select_main[filter.table.name].push(condition);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
if (filter.operator == FilterItemOperator.all.equals)
|
|
84
|
+
await addCondition(this.getIn(column_name, filter.not, values));
|
|
85
|
+
else if (filter.operator == FilterItemOperator.all.contains)
|
|
86
|
+
for (const value of values)
|
|
87
|
+
await addCondition(this.getLike(column_name, filter.not, value));
|
|
88
|
+
else if (filter.operator == FilterItemOperator.all.regex)
|
|
89
|
+
for (const value of values)
|
|
90
|
+
await addCondition(this.getRegex(column_name, filter.not, value));
|
|
91
|
+
else if (filter.operator == FilterItemOperator.all.empty)
|
|
92
|
+
await addCondition(this.getEmpty(column_name, filter.not));
|
|
93
|
+
else if (filter.operator == FilterItemOperator.all.exists)
|
|
94
|
+
await addCondition(this.getExists(column_name, filter.not));
|
|
95
|
+
else if (filter.operator == FilterItemOperator.all.includes)
|
|
96
|
+
await addCondition(this.getIncludes(column_name, filter.not, values));
|
|
97
|
+
else if (filter.operator == FilterItemOperator.all.startswith)
|
|
98
|
+
for (const value of values)
|
|
99
|
+
await addCondition(this.getStartsWith(column_name, filter.not, value));
|
|
100
|
+
else if (filter.operator == FilterItemOperator.all.endswith)
|
|
101
|
+
for (const value of values)
|
|
102
|
+
await addCondition(this.getEndsWith(column_name, filter.not, value));
|
|
103
|
+
else if (filter.operator == FilterItemOperator.all.lessthan)
|
|
104
|
+
{
|
|
105
|
+
if (filter.not)
|
|
106
|
+
await addCondition(this.getGTE(column_name, Math.max(...getNumbers())));
|
|
107
|
+
else
|
|
108
|
+
await addCondition(this.getLT(column_name, Math.max(...getNumbers())));
|
|
109
|
+
}
|
|
110
|
+
else if (filter.operator == FilterItemOperator.all.lessthanequal)
|
|
111
|
+
{
|
|
112
|
+
if (filter.not)
|
|
113
|
+
await addCondition(this.getGT(column_name, Math.max(...getNumbers())));
|
|
114
|
+
else
|
|
115
|
+
await addCondition(this.getLTE(column_name, Math.max(...getNumbers())));
|
|
116
|
+
}
|
|
117
|
+
else if (filter.operator == FilterItemOperator.all.morethan)
|
|
118
|
+
{
|
|
119
|
+
if (filter.not)
|
|
120
|
+
await addCondition(this.getLTE(column_name, Math.max(...getNumbers())));
|
|
121
|
+
else
|
|
122
|
+
await addCondition(this.getGT(column_name, Math.max(...getNumbers())));
|
|
123
|
+
}
|
|
124
|
+
else if (filter.operator == FilterItemOperator.all.morethanequal)
|
|
125
|
+
{
|
|
126
|
+
if (filter.not)
|
|
127
|
+
await addCondition(this.getLT(column_name, Math.max(...getNumbers())));
|
|
128
|
+
else
|
|
129
|
+
await addCondition(this.getGTE(column_name, Math.max(...getNumbers())));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
for (let table of Object.keys(conditions_in_select_main))
|
|
133
|
+
{
|
|
134
|
+
let conditions = conditions_in_select_main[table];
|
|
135
|
+
if (conditions.length > 0)
|
|
136
|
+
ans.push(await getCondition_IDInSelect(table, false, conditions));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return ans;
|
|
140
|
+
}
|
|
141
|
+
public abstract checkColumn(table_name: string, column_name: string,): void;
|
|
142
|
+
public abstract getRealColumnName(table_name: string, column_name: string,): string;
|
|
143
|
+
public abstract getIn(column_name: string, not: boolean, values: string[]): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
144
|
+
public abstract getLike(column_name: string, not: boolean, value: string): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
145
|
+
public abstract getRegex(column_name: string, not: boolean, value: string): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
146
|
+
public abstract getEmpty(column_name: string, not: boolean): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
147
|
+
public abstract getExists(column_name: string, not: boolean): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
148
|
+
public abstract getIncludes(column_name: string, not: boolean, value: string[]): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
149
|
+
public abstract getStartsWith(column_name: string, not: boolean, value: string): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
150
|
+
public abstract getEndsWith(column_name: string, not: boolean, value: string): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
151
|
+
public abstract getLT(column_name: string, value: any): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
152
|
+
public abstract getLTE(column_name: string, value: any): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
153
|
+
public abstract getGT(column_name: string, value: any): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
154
|
+
public abstract getGTE(column_name: string, value: any): { condition: WhereOptions, partial: boolean, independant?: { not: boolean } };
|
|
155
|
+
public abstract getInSelect(table: string, not: boolean, join: BaseFilterItemBuilder_JoinTable<WhereOptions>, conditions: WhereOptions[]): Promise<WhereOptions>;
|
|
156
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseTable } from "./BaseTable";
|
|
2
|
+
import { BaseDatabase } from "./BaseDatabase";
|
|
3
|
+
import { BaseFilterItemBuilder } from "./BaseFilterItemBuilder";
|
|
4
|
+
|
|
5
|
+
export abstract class BaseFilterItemBuilderDatabase<WhereOptions> extends BaseFilterItemBuilder<BaseTable<BaseDatabase, any>, WhereOptions>
|
|
6
|
+
{
|
|
7
|
+
constructor(public database: BaseDatabase)
|
|
8
|
+
{
|
|
9
|
+
super();
|
|
10
|
+
}
|
|
11
|
+
public checkColumn(table_name: string, column_name: string,): void
|
|
12
|
+
{
|
|
13
|
+
let t = this.database.getTable<BaseTable<BaseDatabase, any>>(table_name);
|
|
14
|
+
t.checkColumn(column_name, false, null);
|
|
15
|
+
}
|
|
16
|
+
public getRealColumnName(table_name: string, column_name: string,): string
|
|
17
|
+
{
|
|
18
|
+
let t = this.database.getTable<BaseTable<BaseDatabase, any>>(table_name);
|
|
19
|
+
return t.getRealColumnName(column_name);
|
|
20
|
+
}
|
|
21
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -5,6 +5,8 @@ export * from "./BaseController";
|
|
|
5
5
|
export * from "./BaseCron";
|
|
6
6
|
export * from "./BaseDatabase";
|
|
7
7
|
export * from "./BaseEmailService";
|
|
8
|
+
export * from "./BaseFilterItemBuilder";
|
|
9
|
+
export * from "./BaseFilterItemBuilderDatabase";
|
|
8
10
|
export * from "./BaseTable";
|
|
9
11
|
export * from "./CommandOperation";
|
|
10
12
|
export * from "./EmptyDatabase";
|