From 688b705fc2e4c69e4e591e7d00dbeb3f8b7104ed Mon Sep 17 00:00:00 2001 From: Qurban Ahmad Date: Sat, 16 Nov 2024 22:40:11 +0530 Subject: [PATCH] feat: added pagination to /admin/user endpoint --- apps/api/src/app/admin/admin.controller.ts | 10 ++++++++-- apps/api/src/app/admin/admin.service.ts | 23 +++++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index e0444d112..4cc4d467e 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -352,7 +352,13 @@ export class AdminController { @Get('user') @HasPermission(permissions.accessAdminControl) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) - public async getUsers(): Promise { - return this.adminService.getUsers(); + public async getUsers( + @Query('skip') skip?: number, + @Query('take') take?: number + ): Promise { + return this.adminService.getUsers({ + skip: isNaN(skip) ? undefined : skip, + take: isNaN(take) ? undefined : take + }); } } diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 49964c77d..f5e0d7817 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -429,8 +429,14 @@ export class AdminService { }; } - public async getUsers(): Promise { - return { users: await this.getUsersWithAnalytics() }; + public async getUsers({ + skip, + take = Number.MAX_SAFE_INTEGER + }: { + skip?: number; + take?: number; + }): Promise { + return { users: await this.getUsersWithAnalytics({ take, skip }) }; } public async patchAssetProfileData({ @@ -640,7 +646,13 @@ export class AdminService { return { marketData, count: marketData.length }; } - private async getUsersWithAnalytics(): Promise { + private async getUsersWithAnalytics({ + take, + skip + }: { + take?: number; + skip?: number; + }): Promise { let orderBy: Prisma.UserOrderByWithRelationInput = { createdAt: 'desc' }; @@ -662,6 +674,8 @@ export class AdminService { const usersWithAnalytics = await this.prismaService.user.findMany({ orderBy, where, + skip, + take, select: { _count: { select: { Account: true, Order: true } @@ -677,8 +691,7 @@ export class AdminService { id: true, role: true, Subscription: true - }, - take: 30 + } }); return usersWithAnalytics.map(