blixify-server 0.2.13 → 0.2.15

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mongoWrapper.d.ts","sourceRoot":"","sources":["../../src/apis/mongoWrapper.ts"],"names":[],"mappings":"AASA,OAAO,cAAc,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAsGD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,EAAE,GAAG,CAAM;IAClB,UAAU,SAAM;IAChB,MAAM,UAAS;IACf,MAAM,EAAE,cAAc,CAQpB;IACF,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,SAAM;IACb,KAAK,SAAM;IACX,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IAEX,YAAY,QAAS,GAAG,aAEtB;gBAGA,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,EACrD,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI;IAe3D,UAAU,SAAU,GAAG,SAIrB;IAEF,aAAa,YACF,GAAG,QACN,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OAC/B,GAAG,UACA;QACN,GAAG,CAAC,EAAE,GAAG,CAAC;QACV,GAAG,CAAC,EAAE,GAAG,CAAC;KACX,mBA8CD;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAyE5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAkDtC;IAEF,OAAO,QAAe,GAAG,OAAO,GAAG;;mBAuCjC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAgKtC;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqGtC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBA0I5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAwCtC;IAEF,mBAAmB,CAAC,GAAG,EAAE,GAAG;IAoM5B,QAAQ,QAAe,GAAG,OAAO,GAAG;;;;;mBA2PlC;IAEF,IAAI,YA+EF;CACH"}
1
+ {"version":3,"file":"mongoWrapper.d.ts","sourceRoot":"","sources":["../../src/apis/mongoWrapper.ts"],"names":[],"mappings":"AASA,OAAO,cAAc,MAAM,yBAAyB,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AA4GD;;;;GAIG;AACH,qBAAa,YAAY;IACvB,OAAO,EAAE,GAAG,CAAM;IAClB,UAAU,SAAM;IAChB,MAAM,UAAS;IACf,MAAM,EAAE,cAAc,CAQpB;IACF,GAAG,EAAE,UAAU,CAAC;IAChB,OAAO,SAAM;IACb,KAAK,SAAM;IACX,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IAEX,YAAY,QAAS,GAAG,aAEtB;gBAGA,OAAO,EAAE,GAAG,EACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,OAAO,EACrD,GAAG,EAAE,UAAU,EACf,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,EACzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI;IAe3D,UAAU,SAAU,GAAG,SAIrB;IAEF,aAAa,YACF,GAAG,QACN,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OAC/B,GAAG,UACA;QACN,GAAG,CAAC,EAAE,GAAG,CAAC;QACV,GAAG,CAAC,EAAE,GAAG,CAAC;KACX,mBA8CD;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBAyE5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAkDtC;IAEF,OAAO,QAAe,GAAG,OAAO,GAAG;;mBAuCjC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAgKtC;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAqGtC;IAEF,eAAe,QACR,GAAG,OACH,GAAG,yBACc,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC;;mBA0I5C;IAEF,UAAU,QACH,GAAG,OACH,GAAG,qBACU,GAAG,KAAK,QAAQ,GAAG,CAAC;;mBAwCtC;IAEF,mBAAmB,CAAC,GAAG,EAAE,GAAG;IAiL5B,QAAQ,QAAe,GAAG,OAAO,GAAG;;;;;mBAgQlC;IAEF,IAAI,YA+EF;CACH"}
@@ -19,98 +19,111 @@ const QueryModel_1 = require("../model/QueryModel");
19
19
  const utils_1 = require("./utils");
20
20
  const handleParseQueryFilter = (queryList, prefix) => {
21
21
  const queryFilter = {};
22
+ const queryGroupValues = {};
22
23
  if (queryList && queryList.length > 0) {
23
- queryList.forEach((eachQuery) => {
24
- const orConditions = [];
25
- if (eachQuery.type === "search") {
26
- if (eachQuery.searchIds && eachQuery.searchIds.length > 0) {
27
- eachQuery.searchIds.forEach((eachField) => {
28
- const mainField = prefix ? `${prefix}.${eachField}` : eachField;
29
- orConditions.push({
30
- [mainField]: {
31
- $regex: eachQuery.value
32
- .toString()
33
- .replace(/[.*+?^${}()|[\]\\]/g, "\\$&"),
34
- $options: "i",
35
- },
36
- });
37
- });
38
- }
39
- if (eachQuery.foreign &&
40
- eachQuery.foreign.searchFields &&
41
- eachQuery.foreign.searchFields.length > 0) {
42
- let foreignAlias = eachQuery.foreign.alias;
43
- if (!foreignAlias) {
44
- foreignAlias = eachQuery.foreign.localField;
45
- }
46
- if (prefix) {
47
- foreignAlias = `${prefix}.${foreignAlias}`;
48
- }
49
- eachQuery.foreign.searchFields.forEach((foreignField) => {
50
- orConditions.push({
51
- [`${foreignAlias}.${foreignField}`]: {
52
- $regex: eachQuery.value
53
- .toString()
54
- .replace(/[.*+?^${}()|[\]\\]/g, "\\$&"),
55
- $options: "i",
56
- },
57
- });
58
- });
59
- }
60
- }
61
- // For non-"search" types (like "=" or ">" etc.), use queryId.
62
- let queryId = eachQuery.queryId || "";
24
+ queryList.map((eachQuery) => {
25
+ var _a;
26
+ let queryId = (_a = eachQuery.queryId) !== null && _a !== void 0 ? _a : "";
63
27
  if (prefix)
64
28
  queryId = `${prefix}.${queryId}`;
29
+ const value = eachQuery.value;
30
+ const queryValues = {};
31
+ let orOption = false;
65
32
  switch (eachQuery.type) {
33
+ case "search":
34
+ if (eachQuery.searchIds && eachQuery.searchIds.length > 0) {
35
+ eachQuery.searchIds.map((eachSearchId) => {
36
+ orOption = true;
37
+ queryValues[eachSearchId] = {
38
+ $regex: `${(0, utils_1.handleSpecialWordsEscapeRegex)(value)}`,
39
+ $options: "i",
40
+ };
41
+ });
42
+ }
43
+ break;
66
44
  case "=":
67
- queryFilter[queryId] = eachQuery.value;
45
+ queryValues[queryId] = value;
68
46
  break;
69
47
  case "!=":
70
- queryFilter[queryId] = { $ne: eachQuery.value };
71
- break;
72
- case "in":
73
- queryFilter[queryId] = { $in: eachQuery.value };
48
+ queryValues[queryId] = {
49
+ $ne: value,
50
+ };
74
51
  break;
75
52
  case ">":
76
- queryFilter[queryId] = { $gt: eachQuery.value };
53
+ queryValues[queryId] = {
54
+ $gt: value,
55
+ };
77
56
  break;
78
57
  case "<":
79
- queryFilter[queryId] = { $lt: eachQuery.value };
80
- break;
81
- case "!in":
82
- queryFilter[queryId] = { $nin: eachQuery.value };
58
+ queryValues[queryId] = {
59
+ $lt: value,
60
+ };
83
61
  break;
84
62
  case "><":
85
- if (Array.isArray(eachQuery.value) && eachQuery.value.length >= 2) {
86
- queryFilter[queryId] = {
87
- [queryId]: {
88
- $gte: eachQuery.value[0],
89
- $lte: eachQuery.value[1],
90
- },
63
+ if (Array.isArray(value) && value.length >= 2) {
64
+ queryValues[queryId] = {
65
+ $gte: value[0],
66
+ $lte: value[1],
91
67
  };
92
68
  }
93
69
  break;
70
+ case "in":
71
+ queryValues[queryId] = {
72
+ $in: value,
73
+ };
74
+ break;
75
+ case "!in":
76
+ queryFilter[queryId] = {
77
+ $nin: value,
78
+ };
79
+ break;
94
80
  case "exists":
95
- queryFilter[queryId].push({
96
- $exists: eachQuery.value, // `true` if field should exist, `false` if field should not exist
97
- });
81
+ // Check if field exists or not
82
+ queryValues[queryId] = {
83
+ $exists: value, // `true` if field should exist, `false` if field should not exist
84
+ };
98
85
  break;
99
- // Handle other cases as needed.
100
86
  default:
101
87
  break;
102
88
  }
103
- // If we have collected OR conditions for this query, add them to the overall filter.
104
- if (orConditions.length > 0) {
105
- if (queryFilter["$or"]) {
106
- queryFilter["$or"] = queryFilter["$or"].concat(orConditions);
89
+ if (eachQuery.orQuery)
90
+ orOption = true;
91
+ //INFO : Delete Query Values as it's added outside
92
+ if (eachQuery.orQueryGroupId) {
93
+ const groupValue = queryValues[queryId];
94
+ if (groupValue) {
95
+ if (queryGroupValues[eachQuery.orQueryGroupId]) {
96
+ queryGroupValues[eachQuery.orQueryGroupId]["$and"].push({
97
+ [queryId]: queryValues[queryId],
98
+ });
99
+ }
100
+ else {
101
+ queryGroupValues[eachQuery.orQueryGroupId] = {
102
+ $and: [{ [queryId]: queryValues[queryId] }],
103
+ };
104
+ }
105
+ delete queryValues[queryId];
106
+ }
107
+ }
108
+ Object.keys(queryValues).map((eachKey) => {
109
+ if (orOption) {
110
+ if (queryFilter["$or"])
111
+ queryFilter["$or"].push({ [eachKey]: queryValues[eachKey] });
112
+ else
113
+ queryFilter["$or"] = [{ [eachKey]: queryValues[eachKey] }];
107
114
  }
108
115
  else {
109
- queryFilter["$or"] = orConditions;
116
+ queryFilter[eachKey] = queryValues[eachKey];
110
117
  }
111
- }
118
+ });
112
119
  });
113
120
  }
121
+ Object.keys(queryGroupValues).map((eachKey) => {
122
+ if (queryFilter["$or"])
123
+ queryFilter["$or"].push(queryGroupValues[eachKey]);
124
+ else
125
+ queryFilter["$or"] = [queryGroupValues[eachKey]];
126
+ });
114
127
  return queryFilter;
115
128
  };
116
129
  /**
@@ -898,7 +911,11 @@ class MongoWrapper {
898
911
  .db(this.tableId)
899
912
  .collection(this.collection);
900
913
  const pipeline = this.handleBuildPipeline(req);
901
- const countPipeline = [...pipeline];
914
+ // Create countPipeline by removing $skip and $limit stages
915
+ const countPipeline = pipeline.filter((stage) => {
916
+ const stageKey = Object.keys(stage)[0];
917
+ return stageKey !== "$skip" && stageKey !== "$limit";
918
+ });
902
919
  countPipeline.push({ $count: "total" });
903
920
  const [dataList, countResult] = yield Promise.all([
904
921
  mongoCollection.aggregate(pipeline).toArray(),
@@ -1136,24 +1153,6 @@ class MongoWrapper {
1136
1153
  }
1137
1154
  });
1138
1155
  }
1139
- if (query && query.length > 0) {
1140
- query.forEach((q) => {
1141
- if (q.foreign) {
1142
- const alias = q.foreign.alias || q.foreign.localField;
1143
- if (!addedForeignLookups.has(alias)) {
1144
- pipelineList.push({
1145
- $lookup: {
1146
- from: q.foreign.collection,
1147
- localField: q.foreign.localField,
1148
- foreignField: q.foreign.foreignField,
1149
- as: alias,
1150
- },
1151
- });
1152
- addedForeignLookups.set(alias, true);
1153
- }
1154
- }
1155
- });
1156
- }
1157
1156
  if (query && query.length > 0) {
1158
1157
  const filter = handleParseQueryFilter(query);
1159
1158
  pipelineList.push({ $match: filter });
@@ -15,13 +15,6 @@ export interface Query {
15
15
  value: any;
16
16
  queryId?: string;
17
17
  searchIds?: string[];
18
- foreign?: {
19
- collection: string;
20
- localField: string;
21
- foreignField: string;
22
- searchFields: string[];
23
- alias?: string;
24
- };
25
18
  orQuery?: boolean;
26
19
  orQueryGroupId?: string;
27
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"QueryModel.d.ts","sourceRoot":"","sources":["../../src/model/QueryModel.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;IACzE,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,EAAE;YACP,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,EAAE,OAAO,CAAC;SAChB,CAAC;KACH,EAAE,CAAC;CACL;AAED,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAAY,cAAc,OAAO,GAAG,YAmC/D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,WACjB,cAAc,QAChB,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OACxC,GAAG,OACH,GAAG,YAyDT,CAAC"}
1
+ {"version":3,"file":"QueryModel.d.ts","sourceRoot":"","sources":["../../src/model/QueryModel.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,QAAQ,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC;IACzE,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IACnD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,EAAE;YACP,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,EAAE,OAAO,CAAC;SAChB,CAAC;KACH,EAAE,CAAC;CACL;AAED,MAAM,WAAW,IAAI;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,WAAY,cAAc,OAAO,GAAG,YAmC/D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,WACjB,cAAc,QAChB,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OACxC,GAAG,OACH,GAAG,YAyDT,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blixify-server",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "license": "MIT",
5
5
  "main": "dist/apis/index.js",
6
6
  "private": false,