diff --git a/packages/hoppscotch-backend/src/admin/admin.service.ts b/packages/hoppscotch-backend/src/admin/admin.service.ts index 11126618c..f8a8d7ea4 100644 --- a/packages/hoppscotch-backend/src/admin/admin.service.ts +++ b/packages/hoppscotch-backend/src/admin/admin.service.ts @@ -46,17 +46,29 @@ export class AdminService { private readonly configService: ConfigService, ) {} + /** + * Fetch all the users in the infra. + * @param cursorID Users uid + * @param take number of users to fetch + * @returns an Either of array of user or error + * @deprecated use fetchUsersV2 instead + */ + async fetchUsers(cursorID: string, take: number) { + const allUsers = await this.userService.fetchAllUsers(cursorID, take); + return allUsers; + } + /** * Fetch all the users in the infra. * @param searchString search on users displayName or email * @param paginationOption pagination options * @returns an Either of array of user or error */ - async fetchUsers( + async fetchUsersV2( searchString: string, paginationOption: OffsetPaginationArgs, ) { - const allUsers = await this.userService.fetchAllUsers( + const allUsers = await this.userService.fetchAllUsersV2( searchString, paginationOption, ); diff --git a/packages/hoppscotch-backend/src/admin/infra.resolver.ts b/packages/hoppscotch-backend/src/admin/infra.resolver.ts index 0881512be..459c95c84 100644 --- a/packages/hoppscotch-backend/src/admin/infra.resolver.ts +++ b/packages/hoppscotch-backend/src/admin/infra.resolver.ts @@ -79,9 +79,19 @@ export class InfraResolver { @ResolveField(() => [User], { description: 'Returns a list of all the users in infra', + deprecationReason: 'Use allUsersV2 instead', }) @UseGuards(GqlAuthGuard, GqlAdminGuard) - async allUsers( + async allUsers(@Args() args: PaginationArgs): Promise { + const users = await this.adminService.fetchUsers(args.cursor, args.take); + return users; + } + + @ResolveField(() => [User], { + description: 'Returns a list of all the users in infra', + }) + @UseGuards(GqlAuthGuard, GqlAdminGuard) + async allUsersV2( @Args({ name: 'searchString', nullable: true, @@ -90,7 +100,7 @@ export class InfraResolver { searchString: string, @Args() paginationOption: OffsetPaginationArgs, ): Promise { - const users = await this.adminService.fetchUsers( + const users = await this.adminService.fetchUsersV2( searchString, paginationOption, ); diff --git a/packages/hoppscotch-backend/src/user/user.service.spec.ts b/packages/hoppscotch-backend/src/user/user.service.spec.ts index 01a764dd9..a94ed5cbd 100644 --- a/packages/hoppscotch-backend/src/user/user.service.spec.ts +++ b/packages/hoppscotch-backend/src/user/user.service.spec.ts @@ -418,19 +418,19 @@ describe('UserService', () => { test('should resolve right and return 20 users when cursor is null', async () => { mockPrisma.user.findMany.mockResolvedValueOnce(users); - const result = await userService.fetchAllUsers(null, 20); + const result = await userService.fetchAllUsersV2(null, 20); expect(result).toEqual(users); }); test('should resolve right and return next 20 users when cursor is provided', async () => { mockPrisma.user.findMany.mockResolvedValueOnce(users); - const result = await userService.fetchAllUsers('123344', 20); + const result = await userService.fetchAllUsersV2('123344', 20); expect(result).toEqual(users); }); test('should resolve left and return an empty array when users not found', async () => { mockPrisma.user.findMany.mockResolvedValueOnce([]); - const result = await userService.fetchAllUsers(null, 20); + const result = await userService.fetchAllUsersV2(null, 20); expect(result).toEqual([]); }); }); diff --git a/packages/hoppscotch-backend/src/user/user.service.ts b/packages/hoppscotch-backend/src/user/user.service.ts index 4ddf6d558..fd8efb6b2 100644 --- a/packages/hoppscotch-backend/src/user/user.service.ts +++ b/packages/hoppscotch-backend/src/user/user.service.ts @@ -321,13 +321,29 @@ export class UserService { return E.right(jsonSession.right); } + /** + * Fetch all the users in the `User` table based on cursor + * @param cursorID string of userUID or null + * @param take number of users to query + * @returns an array of `User` object + * @deprecated use fetchAllUsersV2 instead + */ + async fetchAllUsers(cursorID: string, take: number) { + const fetchedUsers = await this.prisma.user.findMany({ + skip: cursorID ? 1 : 0, + take: take, + cursor: cursorID ? { uid: cursorID } : undefined, + }); + return fetchedUsers; + } + /** * Fetch all the users in the `User` table based on cursor * @param searchString search on user's displayName or email * @param paginationOption pagination options * @returns an array of `User` object */ - async fetchAllUsers( + async fetchAllUsersV2( searchString: string, paginationOption: OffsetPaginationArgs, ) {