From 6e63bacba748c41ad91d7199b467483193b08ff4 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Fri, 11 Feb 2022 10:15:09 +0100 Subject: [PATCH] let handle mysql the paging --- backend/src/graphql/resolver/AdminResolver.ts | 16 ++++++---- backend/src/typeorm/repository/User.ts | 31 +++++++++++++++++++ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 54fe9335e..2b6138dee 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -32,7 +32,13 @@ export class AdminResolver { @Args() { searchText, currentPage = 1, pageSize = 25, notActivated = false }: SearchUsersArgs, ): Promise { const userRepository = getCustomRepository(UserRepository) - const users = await userRepository.findBySearchCriteria(searchText) + let users: dbUser[] + let count: number + if(notActivated) { + [users, count] = await userRepository.findBySearchCriteriaPagedNotActivated(searchText, currentPage, pageSize) + } else { + [users, count] = await userRepository.findBySearchCriteriaPaged(searchText, currentPage, pageSize) + } let adminUsers = await Promise.all( users.map(async (user) => { const adminUser = new UserAdmin() @@ -41,16 +47,14 @@ export class AdminResolver { adminUser.lastName = user.lastName adminUser.email = user.email adminUser.creation = await getUserCreations(user.id) - adminUser.emailChecked = await hasActivatedEmail(user.email) + adminUser.emailChecked = user.emailChecked adminUser.hasElopage = await hasElopageBuys(user.email) return adminUser }), ) - if (notActivated) adminUsers = adminUsers.filter((u) => !u.emailChecked) - const first = (currentPage - 1) * pageSize return { - userCount: adminUsers.length, - userList: adminUsers.slice(first, first + pageSize), + userCount: count, + userList: adminUsers, } } diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts index 59d6ff465..bf9d55587 100644 --- a/backend/src/typeorm/repository/User.ts +++ b/backend/src/typeorm/repository/User.ts @@ -1,5 +1,6 @@ import { EntityRepository, Repository } from '@dbTools/typeorm' import { User } from '@entity/User' +import internal from 'stream' @EntityRepository(User) export class UserRepository extends Repository { @@ -43,4 +44,34 @@ export class UserRepository extends Repository { ) .getMany() } + async findBySearchCriteriaPaged(searchCriteria: string, currentPage: number, pageSize: number): Promise<[User[], number]> { + return await this.createQueryBuilder('user') + .where( + 'user.firstName like :name or user.lastName like :lastName or user.email like :email', + { + name: `%${searchCriteria}%`, + lastName: `%${searchCriteria}%`, + email: `%${searchCriteria}%`, + }, + ) + .take(pageSize) + .skip((currentPage - 1 ) * pageSize) + .getManyAndCount() + } + + async findBySearchCriteriaPagedNotActivated(searchCriteria: string, currentPage: number, pageSize: number): Promise<[User[], number]> { + return await this.createQueryBuilder('user') + .where( + 'user.firstName like :name or user.lastName like :lastName or user.email like :email', + { + name: `%${searchCriteria}%`, + lastName: `%${searchCriteria}%`, + email: `%${searchCriteria}%`, + emailChecked: false + }, + ) + .take(pageSize) + .skip((currentPage - 1 ) * pageSize) + .getManyAndCount() + } }