Browse Source

feat: added pagination to /admin/user endpoint

pull/4050/head
Qurban Ahmad 9 months ago
committed by Thomas Kaul
parent
commit
688b705fc2
  1. 10
      apps/api/src/app/admin/admin.controller.ts
  2. 23
      apps/api/src/app/admin/admin.service.ts

10
apps/api/src/app/admin/admin.controller.ts

@ -352,7 +352,13 @@ export class AdminController {
@Get('user') @Get('user')
@HasPermission(permissions.accessAdminControl) @HasPermission(permissions.accessAdminControl)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getUsers(): Promise<AdminUsers> { public async getUsers(
return this.adminService.getUsers(); @Query('skip') skip?: number,
@Query('take') take?: number
): Promise<AdminUsers> {
return this.adminService.getUsers({
skip: isNaN(skip) ? undefined : skip,
take: isNaN(take) ? undefined : take
});
} }
} }

23
apps/api/src/app/admin/admin.service.ts

@ -429,8 +429,14 @@ export class AdminService {
}; };
} }
public async getUsers(): Promise<AdminUsers> { public async getUsers({
return { users: await this.getUsersWithAnalytics() }; skip,
take = Number.MAX_SAFE_INTEGER
}: {
skip?: number;
take?: number;
}): Promise<AdminUsers> {
return { users: await this.getUsersWithAnalytics({ take, skip }) };
} }
public async patchAssetProfileData({ public async patchAssetProfileData({
@ -640,7 +646,13 @@ export class AdminService {
return { marketData, count: marketData.length }; return { marketData, count: marketData.length };
} }
private async getUsersWithAnalytics(): Promise<AdminUsers['users']> { private async getUsersWithAnalytics({
take,
skip
}: {
take?: number;
skip?: number;
}): Promise<AdminUsers['users']> {
let orderBy: Prisma.UserOrderByWithRelationInput = { let orderBy: Prisma.UserOrderByWithRelationInput = {
createdAt: 'desc' createdAt: 'desc'
}; };
@ -662,6 +674,8 @@ export class AdminService {
const usersWithAnalytics = await this.prismaService.user.findMany({ const usersWithAnalytics = await this.prismaService.user.findMany({
orderBy, orderBy,
where, where,
skip,
take,
select: { select: {
_count: { _count: {
select: { Account: true, Order: true } select: { Account: true, Order: true }
@ -677,8 +691,7 @@ export class AdminService {
id: true, id: true,
role: true, role: true,
Subscription: true Subscription: true
}, }
take: 30
}); });
return usersWithAnalytics.map( return usersWithAnalytics.map(

Loading…
Cancel
Save