@researchdatabox/redbox-core 0.0.1-beta.9700 → 0.0.1-beta.9909
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/HarvestRunService.d.ts +49 -0
- package/dist/HarvestRunService.d.ts.map +1 -0
- package/dist/HarvestRunService.js +13 -0
- package/dist/api-routes/groups/harvest-runs.d.ts +5 -0
- package/dist/api-routes/groups/harvest-runs.d.ts.map +1 -0
- package/dist/api-routes/groups/harvest-runs.js +79 -0
- package/dist/api-routes/groups/named-query.d.ts +8 -0
- package/dist/api-routes/groups/named-query.d.ts.map +1 -0
- package/dist/api-routes/groups/named-query.js +54 -0
- package/dist/api-routes/groups/records.d.ts.map +1 -1
- package/dist/api-routes/groups/records.js +6 -2
- package/dist/api-routes/groups/reports.d.ts +6 -0
- package/dist/api-routes/groups/reports.d.ts.map +1 -1
- package/dist/api-routes/groups/reports.js +45 -2
- package/dist/api-routes/groups/users.js +3 -3
- package/dist/api-routes/index.d.ts +2 -0
- package/dist/api-routes/index.d.ts.map +1 -1
- package/dist/api-routes/index.js +3 -1
- package/dist/api-routes/openapi.d.ts +0 -1
- package/dist/api-routes/openapi.d.ts.map +1 -1
- package/dist/api-routes/openapi.js +27 -8
- package/dist/api-routes/route-registry.d.ts.map +1 -1
- package/dist/api-routes/route-registry.js +5 -1
- package/dist/api-routes/route-resolution.d.ts.map +1 -1
- package/dist/api-routes/route-resolution.js +15 -1
- package/dist/api-routes/schemas/common.d.ts +1 -2
- package/dist/api-routes/schemas/common.d.ts.map +1 -1
- package/dist/api-routes/schemas/common.js +10 -11
- package/dist/api-routes/schemas/responses.d.ts +6635 -1887
- package/dist/api-routes/schemas/responses.d.ts.map +1 -1
- package/dist/api-routes/schemas/responses.js +364 -269
- package/dist/api-routes/zod-openapi.d.ts +3 -0
- package/dist/api-routes/zod-openapi.d.ts.map +1 -0
- package/dist/api-routes/zod-openapi.js +8 -0
- package/dist/bootstrap.js +3 -3
- package/dist/config/auth.config.d.ts.map +1 -1
- package/dist/config/auth.config.js +8 -1
- package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
- package/dist/config/brandingConfigurationDefaults.config.js +4 -2
- package/dist/config/harvestRuns.config.d.ts +9 -0
- package/dist/config/harvestRuns.config.d.ts.map +1 -0
- package/dist/config/harvestRuns.config.js +11 -0
- package/dist/config/index.d.ts +4 -3
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +4 -3
- package/dist/config/namedQuery.config.d.ts +16 -2
- package/dist/config/namedQuery.config.d.ts.map +1 -1
- package/dist/config/namedQuery.config.js +7 -350
- package/dist/config/report.config.d.ts +2 -11
- package/dist/config/report.config.d.ts.map +1 -1
- package/dist/config/report.config.js +3 -49
- package/dist/config/reusableContributorFormDefinitions.config.d.ts.map +1 -1
- package/dist/config/reusableContributorFormDefinitions.config.js +10 -4
- package/dist/config/routes.config.d.ts.map +1 -1
- package/dist/config/routes.config.js +15 -1
- package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
- package/dist/configmodels/AdminSidebarConfig.js +2 -1
- package/dist/controllers/AdminController.d.ts +1 -0
- package/dist/controllers/AdminController.d.ts.map +1 -1
- package/dist/controllers/AdminController.js +5 -1
- package/dist/controllers/NamedQueryController.d.ts +8 -0
- package/dist/controllers/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/NamedQueryController.js +17 -0
- package/dist/controllers/ReportController.d.ts +7 -0
- package/dist/controllers/ReportController.d.ts.map +1 -1
- package/dist/controllers/ReportController.js +75 -2
- package/dist/controllers/ReportsController.d.ts +1 -0
- package/dist/controllers/ReportsController.d.ts.map +1 -1
- package/dist/controllers/ReportsController.js +12 -2
- package/dist/controllers/index.d.ts.map +1 -1
- package/dist/controllers/index.js +10 -1
- package/dist/controllers/webservice/HarvestRunController.d.ts +13 -0
- package/dist/controllers/webservice/HarvestRunController.d.ts.map +1 -0
- package/dist/controllers/webservice/HarvestRunController.js +148 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts +17 -0
- package/dist/controllers/webservice/NamedQueryController.d.ts.map +1 -0
- package/dist/controllers/webservice/NamedQueryController.js +127 -0
- package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
- package/dist/controllers/webservice/RecordController.js +30 -74
- package/dist/controllers/webservice/ReportController.d.ts +7 -0
- package/dist/controllers/webservice/ReportController.d.ts.map +1 -1
- package/dist/controllers/webservice/ReportController.js +111 -3
- package/dist/form-config/dataRecord-1.0-draft.js +3 -3
- package/dist/form-config/default-1.0-draft.js +2 -2
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/loader/MigrationRunner.d.ts +19 -0
- package/dist/loader/MigrationRunner.d.ts.map +1 -0
- package/dist/loader/MigrationRunner.js +108 -0
- package/dist/loader/bootstrapShimRuntime.d.ts +2 -1
- package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
- package/dist/loader/bootstrapShimRuntime.js +7 -2
- package/dist/loader/index.d.ts +9 -0
- package/dist/loader/index.d.ts.map +1 -1
- package/dist/loader/index.js +100 -3
- package/dist/model/config/ReportConfig.d.ts +1 -1
- package/dist/model/config/ReportConfig.d.ts.map +1 -1
- package/dist/model/config/ReportConfig.js +2 -2
- package/dist/model/storage/HarvestRunModel.d.ts +140 -0
- package/dist/model/storage/HarvestRunModel.d.ts.map +1 -0
- package/dist/model/storage/HarvestRunModel.js +110 -0
- package/dist/model/storage/ReportModel.d.ts +1 -0
- package/dist/model/storage/ReportModel.d.ts.map +1 -1
- package/dist/model/storage/index.d.ts +1 -0
- package/dist/model/storage/index.d.ts.map +1 -1
- package/dist/model/storage/index.js +10 -2
- package/dist/services/HarvestRunService.d.ts +73 -0
- package/dist/services/HarvestRunService.d.ts.map +1 -0
- package/dist/services/HarvestRunService.js +1317 -0
- package/dist/services/NamedQueryService.d.ts +25 -4
- package/dist/services/NamedQueryService.d.ts.map +1 -1
- package/dist/services/NamedQueryService.js +444 -115
- package/dist/services/ReportsService.d.ts +57 -1
- package/dist/services/ReportsService.d.ts.map +1 -1
- package/dist/services/ReportsService.js +252 -34
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +7 -2
- package/dist/visitor/construct.visitor.d.ts.map +1 -1
- package/dist/visitor/construct.visitor.js +8 -3
- package/dist/visitor/template.visitor.d.ts +2 -2
- package/dist/visitor/template.visitor.d.ts.map +1 -1
- package/dist/visitor/template.visitor.js +22 -3
- package/dist/waterline-models/HarvestRecordEvent.d.ts +43 -0
- package/dist/waterline-models/HarvestRecordEvent.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRecordEvent.js +107 -0
- package/dist/waterline-models/HarvestRun.d.ts +51 -0
- package/dist/waterline-models/HarvestRun.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRun.js +125 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts +57 -0
- package/dist/waterline-models/HarvestRunChunk.d.ts.map +1 -0
- package/dist/waterline-models/HarvestRunChunk.js +140 -0
- package/dist/waterline-models/Migration.d.ts +24 -0
- package/dist/waterline-models/Migration.d.ts.map +1 -0
- package/dist/waterline-models/Migration.js +52 -0
- package/dist/waterline-models/index.d.ts +8 -0
- package/dist/waterline-models/index.d.ts.map +1 -1
- package/dist/waterline-models/index.js +13 -1
- package/package.json +28 -27
- package/redbox-loader-templates/bootstrap-shim.js.hbs +14 -1
|
@@ -17,12 +17,47 @@
|
|
|
17
17
|
// You should have received a copy of the GNU General Public License along
|
|
18
18
|
// with this program; if not, write to the Free Software Foundation, Inc.,
|
|
19
19
|
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
20
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(o, k2, desc);
|
|
27
|
+
}) : (function(o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
}));
|
|
31
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
32
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
33
|
+
}) : function(o, v) {
|
|
34
|
+
o["default"] = v;
|
|
35
|
+
});
|
|
36
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
37
|
+
var ownKeys = function(o) {
|
|
38
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
39
|
+
var ar = [];
|
|
40
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
41
|
+
return ar;
|
|
42
|
+
};
|
|
43
|
+
return ownKeys(o);
|
|
44
|
+
};
|
|
45
|
+
return function (mod) {
|
|
46
|
+
if (mod && mod.__esModule) return mod;
|
|
47
|
+
var result = {};
|
|
48
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
49
|
+
__setModuleDefault(result, mod);
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
})();
|
|
20
53
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
54
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
55
|
};
|
|
23
56
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
57
|
exports.NamedQueryResponseRecord = exports.NamedQueryConfig = exports.RelatedRecordFilter = exports.Services = void 0;
|
|
25
58
|
const CoreService_1 = require("../CoreService");
|
|
59
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
60
|
+
const path = __importStar(require("node:path"));
|
|
26
61
|
const luxon_1 = require("luxon");
|
|
27
62
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
28
63
|
const sails_ng_common_1 = require("@researchdatabox/sails-ng-common");
|
|
@@ -80,6 +115,7 @@ const parseObjectParamValue = (queryParamKey, value) => {
|
|
|
80
115
|
}
|
|
81
116
|
throw Error(`${queryParamKey} must be a valid JSON object`);
|
|
82
117
|
};
|
|
118
|
+
const DEFAULT_BOOTSTRAP_DATA_PATH = 'bootstrap-data';
|
|
83
119
|
let namedQueryHandlebarsHelpersRegistered = false;
|
|
84
120
|
const ensureNamedQueryHandlebarsHelpers = () => {
|
|
85
121
|
if (namedQueryHandlebarsHelpersRegistered) {
|
|
@@ -96,51 +132,299 @@ var Services;
|
|
|
96
132
|
*/
|
|
97
133
|
class NamedQueryService extends CoreService_1.Services.Core.Service {
|
|
98
134
|
_exportedMethods = [
|
|
99
|
-
"
|
|
135
|
+
"bootstrapData",
|
|
100
136
|
"getNamedQueryConfig",
|
|
137
|
+
"getSupportedCollections",
|
|
101
138
|
"performNamedQuery",
|
|
102
139
|
"performNamedQueryFromConfig",
|
|
103
140
|
"performNamedQueryFromConfigResults",
|
|
141
|
+
"create",
|
|
142
|
+
"list",
|
|
143
|
+
"update",
|
|
144
|
+
"delete",
|
|
104
145
|
];
|
|
105
|
-
async
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
146
|
+
async bootstrapData(defBrand) {
|
|
147
|
+
const bootstrapPath = this.getBootstrapDataPath();
|
|
148
|
+
let fileNames = [];
|
|
149
|
+
const fileOps = this.getBootstrapFileOps();
|
|
150
|
+
try {
|
|
151
|
+
const fileEntries = await fileOps.readdir(bootstrapPath, { withFileTypes: true });
|
|
152
|
+
fileNames = fileEntries
|
|
153
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith('.json'))
|
|
154
|
+
.map((entry) => entry.name)
|
|
155
|
+
.sort((a, b) => a.localeCompare(b));
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
const ioError = error;
|
|
159
|
+
if (ioError.code === 'ENOENT') {
|
|
160
|
+
sails.log.verbose(`Named query bootstrap data path not found: ${bootstrapPath}`);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
sails.log.error(`Failed to read named query bootstrap data path: ${bootstrapPath}`, error);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
for (const fileName of fileNames) {
|
|
167
|
+
try {
|
|
168
|
+
const filePath = path.join(bootstrapPath, fileName);
|
|
169
|
+
const definition = await this.readJsonFile(filePath);
|
|
170
|
+
if (!definition) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const name = fileName.replace(/\.json$/, '');
|
|
174
|
+
if (!name || typeof definition.collectionName !== 'string' || definition.collectionName.length === 0) {
|
|
175
|
+
sails.log.error(`Skipping named query bootstrap file with missing name or collectionName: ${fileName}`);
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const existing = await NamedQuery.findOne({ key: `${defBrand.id}_${name}` });
|
|
179
|
+
if (existing) {
|
|
180
|
+
sails.log.verbose(`Skipping existing named query bootstrap data: ${name}`);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
await this.create(defBrand, name, definition);
|
|
184
|
+
sails.log.verbose(`Bootstrapped named query: ${name}`);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
sails.log.error(`Failed to bootstrap named query from file: ${fileName}`, error);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
getBootstrapDataPath() {
|
|
192
|
+
const configuredPath = _.get(sails.config, 'bootstrap.bootstrapDataPath', DEFAULT_BOOTSTRAP_DATA_PATH);
|
|
193
|
+
return path.resolve(String(configuredPath), 'namedqueries');
|
|
194
|
+
}
|
|
195
|
+
getBootstrapFileOps() {
|
|
196
|
+
return fs;
|
|
197
|
+
}
|
|
198
|
+
async readJsonFile(filePath) {
|
|
199
|
+
try {
|
|
200
|
+
const content = await this.getBootstrapFileOps().readFile(filePath, 'utf8');
|
|
201
|
+
return JSON.parse(content);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
sails.log.error(`Failed to read named query bootstrap file: ${path.basename(filePath)}`, error);
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
getModel(collectionName) {
|
|
209
|
+
return sails.models?.[collectionName];
|
|
210
|
+
}
|
|
211
|
+
resolveBrandScope(collectionName) {
|
|
212
|
+
if (_.isEmpty(collectionName)) {
|
|
213
|
+
throw new Error('collectionName is required');
|
|
214
|
+
}
|
|
215
|
+
if (collectionName === 'record') {
|
|
216
|
+
return { type: 'field', fieldPath: 'metaMetadata.brandId' };
|
|
217
|
+
}
|
|
218
|
+
if (collectionName === 'user') {
|
|
219
|
+
return { type: 'userRoles', fieldPath: '' };
|
|
220
|
+
}
|
|
221
|
+
const model = this.getModel(collectionName);
|
|
222
|
+
if (!model) {
|
|
223
|
+
throw new Error(`Invalid collectionName '${collectionName}': model not found`);
|
|
224
|
+
}
|
|
225
|
+
const attributes = model.attributes;
|
|
226
|
+
if (attributes && Object.prototype.hasOwnProperty.call(attributes, 'branding')) {
|
|
227
|
+
return { type: 'field', fieldPath: 'branding' };
|
|
228
|
+
}
|
|
229
|
+
throw new Error(`Invalid collectionName '${collectionName}': model does not expose a brand scope`);
|
|
230
|
+
}
|
|
231
|
+
hasRoleInBrand(user, brandId) {
|
|
232
|
+
return _.some(user.roles ?? [], (role) => {
|
|
233
|
+
const roleObj = role;
|
|
234
|
+
const branding = roleObj?.branding;
|
|
235
|
+
const roleBrandId = _.isObject(branding) ? String(branding.id ?? '') : String(branding ?? '');
|
|
236
|
+
return roleBrandId === brandId;
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
async getLinkedSecondaryUserIds(brandId) {
|
|
240
|
+
if (typeof UserLink === 'undefined') {
|
|
241
|
+
return new Set();
|
|
242
|
+
}
|
|
243
|
+
const activeLinks = await UserLink.find({ brandId, status: 'active' });
|
|
244
|
+
return new Set(_.map(activeLinks, (link) => String(link.secondaryUserId ?? '')).filter((id) => id !== ''));
|
|
245
|
+
}
|
|
246
|
+
sanitizeUserForNamedQuery(user) {
|
|
247
|
+
const sanitized = { ...user };
|
|
248
|
+
delete sanitized.password;
|
|
249
|
+
delete sanitized.token;
|
|
250
|
+
return sanitized;
|
|
251
|
+
}
|
|
252
|
+
getMongoQueryValue(mongoQuery, path) {
|
|
253
|
+
return Object.prototype.hasOwnProperty.call(mongoQuery, path) ? mongoQuery[path] : _.get(mongoQuery, path);
|
|
254
|
+
}
|
|
255
|
+
setMongoQueryValue(mongoQuery, path, value) {
|
|
256
|
+
if (path.includes('.')) {
|
|
257
|
+
mongoQuery[path] = value;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
_.set(mongoQuery, path, value);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
unsetMongoQueryValue(mongoQuery, path) {
|
|
264
|
+
if (Object.prototype.hasOwnProperty.call(mongoQuery, path)) {
|
|
265
|
+
delete mongoQuery[path];
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
_.unset(mongoQuery, path);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
isQueryOperatorObject(value) {
|
|
272
|
+
return Object.keys(value).some((key) => key.startsWith('$') || [
|
|
273
|
+
'contains',
|
|
274
|
+
'startsWith',
|
|
275
|
+
'endsWith',
|
|
276
|
+
'like',
|
|
277
|
+
'>',
|
|
278
|
+
'>=',
|
|
279
|
+
'<',
|
|
280
|
+
'<=',
|
|
281
|
+
'!=',
|
|
282
|
+
'in',
|
|
283
|
+
'nin',
|
|
284
|
+
].includes(key));
|
|
285
|
+
}
|
|
286
|
+
flattenDeepTargetCriteria(criteria, prefix = '') {
|
|
287
|
+
const flattened = {};
|
|
288
|
+
for (const [key, value] of Object.entries(criteria)) {
|
|
289
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
290
|
+
if (_.isPlainObject(value) && !this.isQueryOperatorObject(value)) {
|
|
291
|
+
Object.assign(flattened, this.flattenDeepTargetCriteria(value, path));
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
flattened[path] = value;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return flattened;
|
|
298
|
+
}
|
|
299
|
+
toNativeMongoCriteria(criteria) {
|
|
300
|
+
const mongoCriteria = {};
|
|
301
|
+
const operatorMap = {
|
|
302
|
+
'>': '$gt',
|
|
303
|
+
'>=': '$gte',
|
|
304
|
+
'<': '$lt',
|
|
305
|
+
'<=': '$lte',
|
|
306
|
+
'!=': '$ne',
|
|
307
|
+
in: '$in',
|
|
308
|
+
nin: '$nin',
|
|
309
|
+
};
|
|
310
|
+
for (const [key, value] of Object.entries(criteria)) {
|
|
311
|
+
if (_.isPlainObject(value)) {
|
|
312
|
+
const mappedValue = {};
|
|
313
|
+
for (const [operator, operatorValue] of Object.entries(value)) {
|
|
314
|
+
if (operator === 'contains') {
|
|
315
|
+
mappedValue.$regex = _.escapeRegExp(String(operatorValue ?? ''));
|
|
316
|
+
mappedValue.$options = 'i';
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
mappedValue[operatorMap[operator] ?? operator] = operatorValue;
|
|
320
|
+
}
|
|
113
321
|
}
|
|
322
|
+
mongoCriteria[key] = mappedValue;
|
|
114
323
|
}
|
|
115
324
|
else {
|
|
116
|
-
|
|
325
|
+
mongoCriteria[key] = value;
|
|
117
326
|
}
|
|
118
327
|
}
|
|
119
|
-
|
|
120
|
-
await this.createNamedQueriesForBrand(defBrand);
|
|
328
|
+
return mongoCriteria;
|
|
121
329
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
330
|
+
toNativeMongoSort(sort) {
|
|
331
|
+
const mongoSort = {};
|
|
332
|
+
for (const sortEntry of sort ?? []) {
|
|
333
|
+
for (const [field, direction] of Object.entries(sortEntry)) {
|
|
334
|
+
mongoSort[field] = direction === 'DESC' ? -1 : 1;
|
|
335
|
+
}
|
|
126
336
|
}
|
|
337
|
+
return mongoSort;
|
|
127
338
|
}
|
|
128
|
-
|
|
129
|
-
|
|
339
|
+
async getNativeRecordCollection(model) {
|
|
340
|
+
const native = model.native;
|
|
341
|
+
if (typeof native !== 'function') {
|
|
342
|
+
throw new Error("Model record does not expose native collection access");
|
|
343
|
+
}
|
|
344
|
+
return new Promise((resolve, reject) => {
|
|
345
|
+
const nativeFn = native;
|
|
346
|
+
nativeFn((error, collection) => {
|
|
347
|
+
if (error) {
|
|
348
|
+
reject(error);
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
resolve(collection);
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
async create(brand, name, config) {
|
|
357
|
+
const key = `${brand.id}_${name}`;
|
|
358
|
+
const existing = await NamedQuery.findOne({ key });
|
|
359
|
+
if (existing) {
|
|
360
|
+
throw new Error(`Named query '${name}' already exists`);
|
|
361
|
+
}
|
|
362
|
+
const brandScope = this.resolveBrandScope(config.collectionName);
|
|
363
|
+
return (0, rxjs_1.firstValueFrom)(super.getObservable(NamedQuery.create({
|
|
130
364
|
name: name,
|
|
131
365
|
branding: brand.id,
|
|
132
366
|
mongoQuery: JSON.stringify(config.mongoQuery),
|
|
133
367
|
queryParams: JSON.stringify(config.queryParams),
|
|
134
368
|
collectionName: config.collectionName,
|
|
135
369
|
resultObjectMapping: JSON.stringify(config.resultObjectMapping),
|
|
136
|
-
brandIdFieldPath:
|
|
370
|
+
brandIdFieldPath: brandScope.fieldPath,
|
|
137
371
|
sort: (config.sort !== undefined && Array.isArray(config.sort) && config.sort.length > 0) ? JSON.stringify(config.sort) : "",
|
|
138
372
|
expandRelations: config.expandRelations === true,
|
|
139
373
|
relatedRecordFilters: (config.relatedRecordFilters !== undefined && Array.isArray(config.relatedRecordFilters) && config.relatedRecordFilters.length > 0)
|
|
140
374
|
? JSON.stringify(config.relatedRecordFilters)
|
|
141
375
|
: "",
|
|
376
|
+
})));
|
|
377
|
+
}
|
|
378
|
+
async list(brand) {
|
|
379
|
+
const records = (await NamedQuery.find({
|
|
380
|
+
branding: brand.id
|
|
381
|
+
}));
|
|
382
|
+
return records.map((r) => ({
|
|
383
|
+
name: r.name,
|
|
384
|
+
collectionName: r.collectionName,
|
|
385
|
+
mongoQuery: parseSerializedValue(r.mongoQuery, {}),
|
|
386
|
+
queryParams: parseSerializedValue(r.queryParams, {}),
|
|
387
|
+
resultObjectMapping: parseSerializedValue(r.resultObjectMapping, {}),
|
|
388
|
+
brandIdFieldPath: r.brandIdFieldPath || undefined,
|
|
389
|
+
sort: r.sort ? parseSerializedValue(r.sort, []) : undefined,
|
|
390
|
+
expandRelations: r.expandRelations || false,
|
|
391
|
+
relatedRecordFilters: r.relatedRecordFilters ? parseSerializedValue(r.relatedRecordFilters, []) : undefined,
|
|
142
392
|
}));
|
|
143
393
|
}
|
|
394
|
+
async update(brand, name, config) {
|
|
395
|
+
const key = `${brand.id}_${name}`;
|
|
396
|
+
const existing = await NamedQuery.findOne({ key });
|
|
397
|
+
if (!existing) {
|
|
398
|
+
throw new Error(`Named query '${name}' not found`);
|
|
399
|
+
}
|
|
400
|
+
const brandScope = this.resolveBrandScope(config.collectionName);
|
|
401
|
+
const updated = await (0, rxjs_1.firstValueFrom)(super.getObservable(NamedQuery.updateOne({ key }).set({
|
|
402
|
+
name: name,
|
|
403
|
+
branding: brand.id,
|
|
404
|
+
mongoQuery: JSON.stringify(config.mongoQuery),
|
|
405
|
+
queryParams: JSON.stringify(config.queryParams),
|
|
406
|
+
collectionName: config.collectionName,
|
|
407
|
+
resultObjectMapping: JSON.stringify(config.resultObjectMapping),
|
|
408
|
+
brandIdFieldPath: brandScope.fieldPath,
|
|
409
|
+
sort: (config.sort !== undefined && Array.isArray(config.sort) && config.sort.length > 0) ? JSON.stringify(config.sort) : "",
|
|
410
|
+
expandRelations: config.expandRelations === true,
|
|
411
|
+
relatedRecordFilters: (config.relatedRecordFilters !== undefined && Array.isArray(config.relatedRecordFilters) && config.relatedRecordFilters.length > 0)
|
|
412
|
+
? JSON.stringify(config.relatedRecordFilters)
|
|
413
|
+
: "",
|
|
414
|
+
})));
|
|
415
|
+
if (!updated) {
|
|
416
|
+
throw new Error(`Named query '${name}' not found`);
|
|
417
|
+
}
|
|
418
|
+
return updated;
|
|
419
|
+
}
|
|
420
|
+
async delete(brand, name) {
|
|
421
|
+
const key = `${brand.id}_${name}`;
|
|
422
|
+
const existing = await NamedQuery.findOne({ key });
|
|
423
|
+
if (!existing) {
|
|
424
|
+
throw new Error(`Named query '${name}' not found`);
|
|
425
|
+
}
|
|
426
|
+
return (0, rxjs_1.firstValueFrom)(super.getObservable(NamedQuery.destroyOne({ key })));
|
|
427
|
+
}
|
|
144
428
|
async getNamedQueryConfig(brand, namedQuery) {
|
|
145
429
|
const nQDBEntry = await NamedQuery.findOne({
|
|
146
430
|
key: brand.id + "_" + namedQuery
|
|
@@ -148,25 +432,13 @@ var Services;
|
|
|
148
432
|
if (nQDBEntry) {
|
|
149
433
|
return new NamedQueryConfig(nQDBEntry);
|
|
150
434
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
return new NamedQueryConfig({
|
|
157
|
-
name: namedQuery,
|
|
158
|
-
branding: String(brand.id),
|
|
159
|
-
collectionName: configFromSource.collectionName,
|
|
160
|
-
brandIdFieldPath: configFromSource.brandIdFieldPath,
|
|
161
|
-
mongoQuery: _.cloneDeep(configFromSource.mongoQuery),
|
|
162
|
-
queryParams: _.cloneDeep(configFromSource.queryParams),
|
|
163
|
-
resultObjectMapping: _.cloneDeep(configFromSource.resultObjectMapping),
|
|
164
|
-
sort: _.cloneDeep(configFromSource.sort),
|
|
165
|
-
expandRelations: configFromSource.expandRelations,
|
|
166
|
-
relatedRecordFilters: _.cloneDeep(configFromSource.relatedRecordFilters),
|
|
167
|
-
});
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
getSupportedCollections() {
|
|
438
|
+
const collections = _.get(sails.config, ['namedQuery', 'supportedCollections'], []);
|
|
439
|
+
return Array.isArray(collections) ? collections.filter((c) => typeof c === 'string') : [];
|
|
168
440
|
}
|
|
169
|
-
async performNamedQuery(
|
|
441
|
+
async performNamedQuery(_brandIdFieldPath, resultObjectMapping, collectionName, mongoQuery, queryParams, paramMap, brand, start, rows, _user = undefined, sort = undefined, expandRelations = false, relatedRecordFilters = []) {
|
|
170
442
|
const criteriaMeta = { enableExperimentalDeepTargets: true };
|
|
171
443
|
this.setParamsInQuery(mongoQuery, queryParams, paramMap);
|
|
172
444
|
if (relatedRecordFilters && relatedRecordFilters.length > 0) {
|
|
@@ -181,34 +453,57 @@ var Services;
|
|
|
181
453
|
this.setParamsInQuery(filterMongoQuery, filterQueryParams, paramMap);
|
|
182
454
|
const relatedRecords = await filterModel.find({ where: filterMongoQuery, select: [filter.foreignField] }).meta(criteriaMeta);
|
|
183
455
|
const relatedIds = _.uniq(relatedRecords.map((relatedRecord) => _.get(relatedRecord, filter.foreignField)).filter((id) => id != null && id !== ''));
|
|
184
|
-
const existingLocalFieldFilter =
|
|
456
|
+
const existingLocalFieldFilter = this.getMongoQueryValue(mongoQuery, filter.localField);
|
|
185
457
|
const existingRelatedIds = _.isPlainObject(existingLocalFieldFilter) ? _.get(existingLocalFieldFilter, '$in') : undefined;
|
|
186
458
|
if (Array.isArray(existingRelatedIds)) {
|
|
187
|
-
|
|
459
|
+
this.setMongoQueryValue(mongoQuery, filter.localField, {
|
|
188
460
|
$in: _.intersection(existingRelatedIds, relatedIds)
|
|
189
461
|
});
|
|
190
462
|
}
|
|
191
463
|
else {
|
|
192
|
-
|
|
464
|
+
this.setMongoQueryValue(mongoQuery, filter.localField, { $in: relatedIds });
|
|
193
465
|
}
|
|
194
466
|
}
|
|
195
467
|
}
|
|
468
|
+
const brandScope = this.resolveBrandScope(collectionName);
|
|
196
469
|
const that = this;
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
mongoQuery[brandIdFieldPath] = brand.id;
|
|
470
|
+
if (brandScope.type === 'userRoles') {
|
|
471
|
+
return this.performUserNamedQuery(resultObjectMapping, mongoQuery, brand, start, rows, sort);
|
|
200
472
|
}
|
|
201
|
-
|
|
473
|
+
this.setMongoQueryValue(mongoQuery, brandScope.fieldPath, brand.id);
|
|
474
|
+
const waterlineQuery = this.flattenDeepTargetCriteria(mongoQuery);
|
|
475
|
+
sails.log.debug("Mongo query to be executed", waterlineQuery);
|
|
202
476
|
// Get the total count of matching records
|
|
203
477
|
let totalItems = 0;
|
|
204
|
-
const model =
|
|
478
|
+
const model = this.getModel(collectionName);
|
|
205
479
|
if (!model) {
|
|
206
480
|
throw new Error(`Model ${collectionName} not found`);
|
|
207
481
|
}
|
|
208
|
-
|
|
482
|
+
let results = [];
|
|
483
|
+
if (collectionName === 'record') {
|
|
484
|
+
const nativeCollection = await this.getNativeRecordCollection(model);
|
|
485
|
+
const nativeCriteria = this.toNativeMongoCriteria(waterlineQuery);
|
|
486
|
+
totalItems = await nativeCollection.countDocuments(nativeCriteria);
|
|
487
|
+
if (totalItems > 0) {
|
|
488
|
+
let nativeQuery = nativeCollection.find(nativeCriteria);
|
|
489
|
+
const nativeSort = this.toNativeMongoSort(sort);
|
|
490
|
+
if (!_.isEmpty(nativeSort)) {
|
|
491
|
+
nativeQuery = nativeQuery.sort(nativeSort);
|
|
492
|
+
}
|
|
493
|
+
results = await nativeQuery.skip(start).limit(rows).toArray();
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
const count = model.count;
|
|
498
|
+
if (typeof count !== 'function') {
|
|
499
|
+
throw new Error(`Model ${collectionName} does not expose count`);
|
|
500
|
+
}
|
|
501
|
+
const countFn = count;
|
|
502
|
+
totalItems = await countFn(waterlineQuery).meta(criteriaMeta);
|
|
503
|
+
}
|
|
209
504
|
// Build query criteria
|
|
210
505
|
const criteria = {
|
|
211
|
-
where:
|
|
506
|
+
where: waterlineQuery,
|
|
212
507
|
skip: start,
|
|
213
508
|
limit: rows,
|
|
214
509
|
};
|
|
@@ -219,9 +514,13 @@ var Services;
|
|
|
219
514
|
}
|
|
220
515
|
// Run query
|
|
221
516
|
sails.log.debug("Mongo query criteria", criteria);
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
517
|
+
if (collectionName !== 'record' && totalItems > 0) {
|
|
518
|
+
const find = model.find;
|
|
519
|
+
if (typeof find !== 'function') {
|
|
520
|
+
throw new Error(`Model ${collectionName} does not expose find`);
|
|
521
|
+
}
|
|
522
|
+
const findFn = find;
|
|
523
|
+
results = await findFn(criteria).meta(criteriaMeta);
|
|
225
524
|
}
|
|
226
525
|
const responseRecords = [];
|
|
227
526
|
const recordsService = sails.services.recordsservice;
|
|
@@ -229,70 +528,41 @@ var Services;
|
|
|
229
528
|
if (expandRelations === true && collectionName !== 'record') {
|
|
230
529
|
sails.log.debug(`expandRelations is only supported for the 'record' collection; ignoring for '${collectionName}'`);
|
|
231
530
|
}
|
|
531
|
+
// 'user' collections are scoped and rendered separately via performUserNamedQuery,
|
|
532
|
+
// so anything reaching this loop is a record-like (record or scoped dynamic) model.
|
|
232
533
|
for (const record of results) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
const resultMetadata = _.cloneDeep(resultObjectMapping);
|
|
239
|
-
_.forOwn(resultObjectMapping, function (value, key) {
|
|
240
|
-
_.set(resultMetadata, key, that.runTemplate(value, variables));
|
|
241
|
-
});
|
|
242
|
-
defaultMetadata = resultMetadata;
|
|
534
|
+
const recordItem = record;
|
|
535
|
+
if (expandRelationsActual && recordsService && recordItem.redboxOid) {
|
|
536
|
+
try {
|
|
537
|
+
const relationships = await recordsService.getRelatedRecords(recordItem.redboxOid, brand);
|
|
538
|
+
recordItem.relationships = relationships;
|
|
243
539
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
type: that.runTemplate('record.type', variables),
|
|
247
|
-
name: that.runTemplate('record.name', variables),
|
|
248
|
-
email: that.runTemplate('record.email', variables),
|
|
249
|
-
username: that.runTemplate('record.username', variables),
|
|
250
|
-
lastLogin: that.runTemplate('record.lastLogin', variables)
|
|
251
|
-
};
|
|
540
|
+
catch (err) {
|
|
541
|
+
sails.log.warn(`Failed to fetch relationships for record ${recordItem.redboxOid}`, err);
|
|
252
542
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
543
|
+
}
|
|
544
|
+
let defaultMetadata = {};
|
|
545
|
+
const variables = { record: recordItem };
|
|
546
|
+
if (!_.isEmpty(resultObjectMapping)) {
|
|
547
|
+
const resultMetadata = _.cloneDeep(resultObjectMapping);
|
|
548
|
+
_.forOwn(resultObjectMapping, function (value, key) {
|
|
549
|
+
_.set(resultMetadata, key, that.runTemplate(value, variables));
|
|
259
550
|
});
|
|
260
|
-
|
|
551
|
+
defaultMetadata = resultMetadata;
|
|
261
552
|
}
|
|
262
553
|
else {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const relationships = await recordsService.getRelatedRecords(recordItem.redboxOid, brand);
|
|
267
|
-
recordItem.relationships = relationships;
|
|
268
|
-
}
|
|
269
|
-
catch (err) {
|
|
270
|
-
sails.log.warn(`Failed to fetch relationships for record ${recordItem.redboxOid}`, err);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
let defaultMetadata = {};
|
|
274
|
-
const variables = { record: recordItem };
|
|
275
|
-
if (!_.isEmpty(resultObjectMapping)) {
|
|
276
|
-
const resultMetadata = _.cloneDeep(resultObjectMapping);
|
|
277
|
-
_.forOwn(resultObjectMapping, function (value, key) {
|
|
278
|
-
_.set(resultMetadata, key, that.runTemplate(value, variables));
|
|
279
|
-
});
|
|
280
|
-
defaultMetadata = resultMetadata;
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
defaultMetadata = collectionName === 'record'
|
|
284
|
-
? that.runTemplate('record.metadata', variables)
|
|
285
|
-
: recordItem;
|
|
286
|
-
}
|
|
287
|
-
const responseRecord = new NamedQueryResponseRecord({
|
|
288
|
-
oid: recordItem.redboxOid ?? getIdentifierProperty(recordItem, 'id') ?? '',
|
|
289
|
-
title: getStringProperty(recordItem.metadata, 'title') ?? getStringProperty(recordItem, 'name') ?? getStringProperty(recordItem, 'title') ?? '',
|
|
290
|
-
metadata: defaultMetadata,
|
|
291
|
-
lastSaveDate: recordItem.lastSaveDate ?? null,
|
|
292
|
-
dateCreated: recordItem.dateCreated ?? null
|
|
293
|
-
});
|
|
294
|
-
responseRecords.push(responseRecord);
|
|
554
|
+
defaultMetadata = collectionName === 'record'
|
|
555
|
+
? that.runTemplate('record.metadata', variables)
|
|
556
|
+
: recordItem;
|
|
295
557
|
}
|
|
558
|
+
const responseRecord = new NamedQueryResponseRecord({
|
|
559
|
+
oid: recordItem.redboxOid ?? getIdentifierProperty(recordItem, 'id') ?? '',
|
|
560
|
+
title: getStringProperty(recordItem.metadata, 'title') ?? getStringProperty(recordItem, 'name') ?? getStringProperty(recordItem, 'title') ?? '',
|
|
561
|
+
metadata: defaultMetadata,
|
|
562
|
+
lastSaveDate: recordItem.lastSaveDate ?? null,
|
|
563
|
+
dateCreated: recordItem.dateCreated ?? null
|
|
564
|
+
});
|
|
565
|
+
responseRecords.push(responseRecord);
|
|
296
566
|
}
|
|
297
567
|
const response = new ListAPIResponse_1.ListAPIResponse();
|
|
298
568
|
const startIndex = start;
|
|
@@ -304,6 +574,65 @@ var Services;
|
|
|
304
574
|
response.summary.numFound = totalItems;
|
|
305
575
|
return response;
|
|
306
576
|
}
|
|
577
|
+
async performUserNamedQuery(resultObjectMapping, mongoQuery, brand, start, rows, sort = undefined) {
|
|
578
|
+
const criteriaMeta = { enableExperimentalDeepTargets: true };
|
|
579
|
+
const model = this.getModel('user');
|
|
580
|
+
if (!model) {
|
|
581
|
+
throw new Error(`Invalid collectionName 'user': model not found`);
|
|
582
|
+
}
|
|
583
|
+
const userModel = model;
|
|
584
|
+
const criteria = { where: mongoQuery };
|
|
585
|
+
if (sort !== undefined && Array.isArray(sort) && (sort?.length ?? 0) > 0) {
|
|
586
|
+
criteria.sort = sort;
|
|
587
|
+
}
|
|
588
|
+
let query = userModel.find(criteria);
|
|
589
|
+
if (query && typeof query.populate === 'function') {
|
|
590
|
+
query = query.populate('roles');
|
|
591
|
+
}
|
|
592
|
+
const allUsers = query && typeof query.meta === 'function'
|
|
593
|
+
? await query.meta(criteriaMeta)
|
|
594
|
+
: await query;
|
|
595
|
+
const brandId = String(brand.id);
|
|
596
|
+
const linkedSecondaryUserIds = await this.getLinkedSecondaryUserIds(brandId);
|
|
597
|
+
const scopedUsers = allUsers
|
|
598
|
+
.filter((user) => this.hasRoleInBrand(user, brandId) || linkedSecondaryUserIds.has(String(user.id ?? '')))
|
|
599
|
+
.map((user) => this.sanitizeUserForNamedQuery(user));
|
|
600
|
+
const pagedUsers = scopedUsers.slice(start, start + rows);
|
|
601
|
+
const responseRecords = [];
|
|
602
|
+
for (const userRecord of pagedUsers) {
|
|
603
|
+
let defaultMetadata = {};
|
|
604
|
+
const variables = { record: userRecord };
|
|
605
|
+
if (!_.isEmpty(resultObjectMapping)) {
|
|
606
|
+
const resultMetadata = _.cloneDeep(resultObjectMapping);
|
|
607
|
+
_.forOwn(resultObjectMapping, (value, key) => {
|
|
608
|
+
_.set(resultMetadata, key, this.runTemplate(value, variables));
|
|
609
|
+
});
|
|
610
|
+
defaultMetadata = resultMetadata;
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
defaultMetadata = {
|
|
614
|
+
type: this.runTemplate('record.type', variables),
|
|
615
|
+
name: this.runTemplate('record.name', variables),
|
|
616
|
+
email: this.runTemplate('record.email', variables),
|
|
617
|
+
username: this.runTemplate('record.username', variables),
|
|
618
|
+
lastLogin: this.runTemplate('record.lastLogin', variables)
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
responseRecords.push(new NamedQueryResponseRecord({
|
|
622
|
+
oid: '',
|
|
623
|
+
title: '',
|
|
624
|
+
metadata: defaultMetadata,
|
|
625
|
+
lastSaveDate: userRecord.updatedAt ?? null,
|
|
626
|
+
dateCreated: userRecord.createdAt ?? null
|
|
627
|
+
}));
|
|
628
|
+
}
|
|
629
|
+
const response = new ListAPIResponse_1.ListAPIResponse();
|
|
630
|
+
response.records = responseRecords;
|
|
631
|
+
response.summary.start = start;
|
|
632
|
+
response.summary.page = Math.floor((start / rows) + 1);
|
|
633
|
+
response.summary.numFound = scopedUsers.length;
|
|
634
|
+
return response;
|
|
635
|
+
}
|
|
307
636
|
setParamsInQuery(mongoQuery, queryParams, paramMap) {
|
|
308
637
|
for (const queryParamKey in queryParams) {
|
|
309
638
|
let value = paramMap[queryParamKey];
|
|
@@ -314,7 +643,7 @@ var Services;
|
|
|
314
643
|
}
|
|
315
644
|
if (_.isUndefined(value)) {
|
|
316
645
|
if (queryParam.whenUndefined == NamedQueryWhenUndefinedOptions.ignore) {
|
|
317
|
-
|
|
646
|
+
this.unsetMongoQueryValue(mongoQuery, queryParam.path);
|
|
318
647
|
continue;
|
|
319
648
|
}
|
|
320
649
|
if (queryParam.whenUndefined == NamedQueryWhenUndefinedOptions.defaultValue) {
|
|
@@ -393,14 +722,14 @@ var Services;
|
|
|
393
722
|
}
|
|
394
723
|
}
|
|
395
724
|
if (value == undefined && queryParam.whenUndefined == NamedQueryWhenUndefinedOptions.ignore) {
|
|
396
|
-
|
|
725
|
+
this.unsetMongoQueryValue(mongoQuery, queryParam.path);
|
|
397
726
|
}
|
|
398
727
|
else {
|
|
399
|
-
const existingValue =
|
|
728
|
+
const existingValue = this.getMongoQueryValue(mongoQuery, queryParam.path);
|
|
400
729
|
if (_.isPlainObject(existingValue) && _.isPlainObject(value)) {
|
|
401
730
|
_.merge(value, existingValue);
|
|
402
731
|
}
|
|
403
|
-
|
|
732
|
+
this.setMongoQueryValue(mongoQuery, queryParam.path, value);
|
|
404
733
|
}
|
|
405
734
|
}
|
|
406
735
|
return mongoQuery;
|
|
@@ -431,13 +760,12 @@ var Services;
|
|
|
431
760
|
});
|
|
432
761
|
const collectionName = _.get(config, 'collectionName', '') ?? '';
|
|
433
762
|
const resultObjectMapping = _.get(config, 'resultObjectMapping', {}) ?? {};
|
|
434
|
-
const brandIdFieldPath = _.get(config, 'brandIdFieldPath', '') ?? '';
|
|
435
763
|
const mongoQuery = _.cloneDeep(_.get(config, 'mongoQuery', {}) ?? {});
|
|
436
764
|
const queryParams = (_.get(config, 'queryParams', {}) ?? {});
|
|
437
765
|
const sort = _.cloneDeep(_.get(config, 'sort', []) ?? []);
|
|
438
766
|
const expandRelations = _.get(config, 'expandRelations', false);
|
|
439
767
|
const relatedRecordFilters = _.cloneDeep(_.get(config, 'relatedRecordFilters', []) ?? []);
|
|
440
|
-
return await this.performNamedQuery(
|
|
768
|
+
return await this.performNamedQuery('', resultObjectMapping, collectionName, mongoQuery, queryParams, paramMap, brand, start, rows, user, sort, expandRelations, relatedRecordFilters);
|
|
441
769
|
}
|
|
442
770
|
async performNamedQueryFromConfigResults(config, paramMap, brand, queryName, start = 0, rows = 30, maxRecords = 100, user = undefined) {
|
|
443
771
|
const records = [];
|
|
@@ -465,9 +793,10 @@ var Services;
|
|
|
465
793
|
}
|
|
466
794
|
// update the start point
|
|
467
795
|
start = currentRetrievedCount;
|
|
468
|
-
// Check the number of records and
|
|
796
|
+
// Check the number of records and stop if it exceeds maxRecords.
|
|
469
797
|
if (records.length > maxRecords) {
|
|
470
798
|
sails.log.warn(`All named query results: returning early before finished with ${records.length} results for '${queryName}' from ${requestCount} requests because the number of records is more than max records ${maxRecords}`);
|
|
799
|
+
break;
|
|
471
800
|
}
|
|
472
801
|
// continue the while loop
|
|
473
802
|
}
|
|
@@ -561,4 +890,4 @@ class NamedQueryResponseRecord {
|
|
|
561
890
|
}
|
|
562
891
|
}
|
|
563
892
|
exports.NamedQueryResponseRecord = NamedQueryResponseRecord;
|
|
564
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWRRdWVyeVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvTmFtZWRRdWVyeVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBGQUEwRjtBQUMxRixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7QUFFOUQsZ0RBQXNEO0FBRXRELGlDQUFpQztBQUNqQyw0REFBb0M7QUFDcEMsc0VBQW1GO0FBRW5GLDhEQUEyRDtBQUMzRCwrQkFBc0M7QUFXdEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQXNCLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUUxRyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBYyxFQUFFLFlBQW9CLEVBQXNCLEVBQUU7SUFDckYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsT0FBTyxPQUFPLGFBQWEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZFLENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFjLEVBQUUsWUFBb0IsRUFBc0IsRUFBRTtJQUN6RixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENB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
|
|
893
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmFtZWRRdWVyeVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvTmFtZWRRdWVyeVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBGQUEwRjtBQUMxRixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUQsZ0RBQXNEO0FBRXRELHFEQUF1QztBQUN2QyxnREFBa0M7QUFDbEMsaUNBQWlDO0FBQ2pDLDREQUFvQztBQUNwQyxzRUFBbUY7QUFFbkYsOERBQTJEO0FBQzNELCtCQUFzQztBQTZCdEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQXNCLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUUxRyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBYyxFQUFFLFlBQW9CLEVBQXNCLEVBQUU7SUFDckYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsT0FBTyxPQUFPLGFBQWEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZFLENBQUMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFjLEVBQUUs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
|