System Information
- Strapi Version: 4.16.0
On the documentation, Strapi recommend to use Query Engine to interfact with the database, but, I don’t really like because there is no easy solution to manage pagination…
And also, the transformResponse function add attributes to the strucutre and I don’t understand why ? It complicates the structure
So, I made a few examples to test the different solution and to have your opinion
async find(ctx) {
const page = parseInt(ctx.query.page) || 1;
const pageSize = parseInt(ctx.query.pageSize) || 2;
const filters = ctx.query.filters;
const populate = ctx.query.populate || populateActivity;
/***** Default Override function ******/
await this.validateQuery(ctx);
const sanitizedQueryParams = await this.sanitizeQuery(ctx);
const { results: resultsTs, pagination: paginationTs } = await strapi
.service("api::activity.activity")
.find(sanitizedQueryParams);
const sanitizedResults = await this.sanitizeOutput(resultsTs, ctx);
//the transformResponse function add data.attributes..... Why ?
return this.transformResponse(sanitizedResults, { paginationTs });
/*-----------------------------------------*/
/***** REST Api ? With Pagination *****/
const { results, pagination } = await strapi.service("api::activity.activity").find({
populate: populate,
pagination: {
page: page,
pageSize: pageSize,
},
filters: filters,
});
const activitiesMetaApi = {
data: results,
meta: pagination,
};
return activitiesMetaApi;
/*-----------------------------------------*/
/***** Entity Services -> no pagination ?! *****/
const activitiesEntity = await strapi.entityService.findMany("api::activity.activity", {
sort: "id",
});
return activitiesEntity;
/*-----------------------------------------*/
/***** Query Engine Api With Pagination *****/
const [activities, count] = await strapi.db.query("api::activity.activity").findWithCount({
offset: (page - 1) * pageSize,
limit: pageSize,
populate: populate,
filters: filters,
});
const pageCount = Math.ceil(count / pageSize);
const meta = {
pagination: {
page: page,
pageSize: pageSize,
pageCount: pageCount,
total: count,
},
};
const activitiesMeta = {
data: activities,
meta: meta,
};
return activitiesMeta;
/*-----------------------------------------*/
},