in source/packages/services/assetlibrary/src/search/search.lite.service.ts [36:97]
public async search(
model: SearchRequestModel,
offset?: string,
count?: number
): Promise<[(GroupItem | DeviceItem)[], string, number]> {
logger.debug(
`search.lite.service search: in: model: ${JSON.stringify(
model
)}, offset:${offset}, count:${count}`
);
// validation
ow(model, ow.object.nonEmpty);
const type =
model.types === undefined || model.types.length === 0
? undefined
: model.types.filter((t) => t === TypeCategory.Device || t === TypeCategory.Group);
ow(type, 'type', ow.object.nonEmpty);
const someFiltersDefined: boolean =
model.ancestorPath !== undefined ||
model.eq !== undefined ||
model.neq !== undefined ||
model.lt !== undefined ||
model.lte !== undefined ||
model.gt !== undefined ||
model.gte !== undefined ||
model.startsWith !== undefined ||
model.endsWith !== undefined ||
model.contains !== undefined;
ow(someFiltersDefined, ow.boolean.true);
// default pagination
if (count === undefined) {
count = this.DEFAULT_SEARCH_COUNT;
}
const models: (GroupItem | DeviceItem)[] = [];
const results = await this.searchDao.search(model, offset, count);
if (results === undefined) {
count = 0;
logger.debug(
`search.lite.service search: exit: models: undefined, offset:${offset}, count:${count}`
);
return [undefined, offset, count];
}
for (const r of results) {
if (r.types.indexOf(TypeCategory.Group) >= 0) {
models.push(this.groupsAssembler.toGroupItem(r));
} else if (r.types.indexOf(TypeCategory.Device) >= 0) {
models.push(this.devicesAssembler.toDeviceItem(r));
}
}
if (models.length < count) {
count = models.length;
}
logger.debug(`search.lite.service search: exit: models: ${JSON.stringify(models)}`);
return [models, offset, count];
}