let handle mysql the paging

This commit is contained in:
Einhornimmond 2022-02-11 10:15:09 +01:00
parent 89a8c25b44
commit 6e63bacba7
2 changed files with 41 additions and 6 deletions

View File

@ -32,7 +32,13 @@ export class AdminResolver {
@Args() { searchText, currentPage = 1, pageSize = 25, notActivated = false }: SearchUsersArgs,
): Promise<SearchUsersResult> {
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,
}
}

View File

@ -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<User> {
@ -43,4 +44,34 @@ export class UserRepository extends Repository<User> {
)
.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()
}
}