json-api-nestjs
Version:
JsonApi Plugin for NestJs
61 lines • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAll = getAll;
const core_1 = require("@mikro-orm/core");
const get_query_for_count_1 = require("./get-query-for-count");
async function getAll(query) {
const { page } = query;
const countSubQuery = get_query_for_count_1.getQueryForCount.call(this, ...[query]);
const skip = (page.number - 1) * page.size;
const paginationQuery = countSubQuery
.clone()
.select(this.microOrmUtilService.currentPrimaryColumn)
.limit(page.size, skip);
const collectIdsAlias = 'CollectIds';
const queryIdsQuery = this.microOrmUtilService
.queryBuilder(collectIdsAlias)
.select(this.microOrmUtilService.currentPrimaryColumn)
.join(paginationQuery, this.microOrmUtilService.currentAlias, {
[`${collectIdsAlias}.${this.microOrmUtilService.currentPrimaryColumn}`]: this.microOrmUtilService
.getKnex()
.ref(`${this.microOrmUtilService.currentAlias}.${this.microOrmUtilService.currentPrimaryColumn}`),
});
const queryCount = this.microOrmUtilService
.queryBuilder()
.from(countSubQuery
.clone()
.select(this.microOrmUtilService.currentPrimaryColumn))
.count(this.microOrmUtilService.currentPrimaryColumn, true);
const resCount = await queryCount.execute('get');
const count = resCount ? +resCount.count : 0;
if (count === 0) {
return {
totalItems: count,
items: [],
};
}
const resIds = await queryIdsQuery
.distinct()
.setFlag(core_1.QueryFlag.DISABLE_PAGINATE)
.execute('all');
const idsArray = resIds.map((r) => r[this.microOrmUtilService.currentPrimaryColumn]);
const resultQueryBuilder = this.microOrmUtilService.queryBuilder().where({
[this.microOrmUtilService.currentPrimaryColumn]: {
$in: idsArray,
},
});
const sortObject = (0, get_query_for_count_1.getSortObject)(query);
const resultList = await this.microOrmUtilService
.prePareQueryBuilder(resultQueryBuilder, query)
.orderBy(Object.keys(sortObject).length > 0
? sortObject
: {
[this.microOrmUtilService.currentPrimaryColumn]: 'ASC',
})
.getResult();
return {
totalItems: count,
items: resultList.map((i) => (0, core_1.wrap)(i).toJSON()),
};
}
//# sourceMappingURL=get-all.js.map