feat: added pagination on users list query

This commit is contained in:
Sergey Yarkov 2021-09-16 14:08:41 +03:00
parent bacacad675
commit 417d236cbb
6 changed files with 17 additions and 9 deletions

View File

@ -37,7 +37,7 @@ export default class UsersController extends BaseController {
throw new Exception(result.message, result.status, result.error.code); throw new Exception(result.message, result.status, result.error.code);
} }
return this.sendResponse(ctx, result.data, result.message, result.status); return this.sendResponse(ctx, result.data, result.message, result.status, result.meta);
} }
/** /**

View File

@ -2,11 +2,12 @@
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'; import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
export default class BaseController { export default class BaseController {
public sendResponse(ctx: HttpContextContract, data: object, message: string, status = 200): void { public sendResponse(ctx: HttpContextContract, data: object, message: string, status = 200, meta?: any): void {
const response = { const response = {
status, status,
message, message,
data, data,
meta,
}; };
return ctx.response.status(response.status).send(response); return ctx.response.status(response.status).send(response);

View File

@ -3,6 +3,9 @@ export default interface IResponse {
status: number; status: number;
message: string; message: string;
data: object; data: object;
meta?: {
pagination?: any;
};
error?: { error?: {
code: string; code: string;
}; };

View File

@ -63,8 +63,9 @@ export default class UserRepository {
* @param params Params to find * @param params Params to find
* @returns Array of users * @returns Array of users
*/ */
public async getAll(params?: any): Promise<User[]> { public async getAll(params?: any) {
const { email, login, first_name, last_name, role }: any = params || {}; const { email, login, first_name, last_name, role, page = 1, limit = 10 }: any = params || {};
const query = this.User.query(); const query = this.User.query();
if (email) { if (email) {
@ -87,8 +88,8 @@ export default class UserRepository {
query.preload('roles').whereHas('roles', q => q.where('slug', role)); query.preload('roles').whereHas('roles', q => q.where('slug', role));
} }
const data = await query.preload('contacts').preload('roles'); const data = await query.preload('contacts').preload('roles').orderBy('created_at', 'desc').paginate(page, limit);
return data; return data.toJSON();
} }
/** /**

View File

@ -80,7 +80,10 @@ export default class UserService {
success: true, success: true,
status: HttpStatusEnum.OK, status: HttpStatusEnum.OK,
message: 'Fetched all users.', message: 'Fetched all users.',
data: users, data: users.data,
meta: {
pagination: users.meta,
},
}; };
} }

View File

@ -4,13 +4,13 @@ import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
/** /**
* Datatypes * Datatypes
*/ */
import HttpStatusEnum from 'App/Datatypes/Enums/HttpStatusEnum'; import CourseStatusEnum from 'App/Datatypes/Enums/CourseStatusEnum';
export default class SetCourseStatusValidator { export default class SetCourseStatusValidator {
constructor(protected ctx: HttpContextContract) {} constructor(protected ctx: HttpContextContract) {}
public schema = schema.create({ public schema = schema.create({
status: schema.enum(Object.values(HttpStatusEnum)), status: schema.enum(Object.values(CourseStatusEnum)),
}); });
public messages = {}; public messages = {};