mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import { getConnection, Brackets, IsNull, Not } from '@dbTools/typeorm'
|
|
import { User as DbUser } from '@entity/User'
|
|
|
|
import { SearchUsersFilters } from '@arg/SearchUsersFilters'
|
|
import { Order } from '@enum/Order'
|
|
|
|
import { LogError } from '@/server/LogError'
|
|
|
|
export const findUsers = async (
|
|
select: string[],
|
|
searchCriteria: string,
|
|
filters: SearchUsersFilters | null,
|
|
currentPage: number,
|
|
pageSize: number,
|
|
order = Order.ASC,
|
|
): Promise<[DbUser[], number]> => {
|
|
const queryRunner = getConnection().createQueryRunner()
|
|
try {
|
|
await queryRunner.connect()
|
|
const query = queryRunner.manager
|
|
.createQueryBuilder(DbUser, 'user')
|
|
.select(select)
|
|
.withDeleted()
|
|
.leftJoinAndSelect('user.emailContact', 'emailContact')
|
|
.where(
|
|
new Brackets((qb) => {
|
|
qb.where(
|
|
'user.firstName like :name or user.lastName like :lastName or emailContact.email like :email',
|
|
{
|
|
name: `%${searchCriteria}%`,
|
|
lastName: `%${searchCriteria}%`,
|
|
email: `%${searchCriteria}%`,
|
|
},
|
|
)
|
|
}),
|
|
)
|
|
if (filters) {
|
|
if (filters.byActivated !== null) {
|
|
query.andWhere('emailContact.emailChecked = :value', { value: filters.byActivated })
|
|
}
|
|
|
|
if (filters.byDeleted !== null) {
|
|
query.andWhere({ deletedAt: filters.byDeleted ? Not(IsNull()) : IsNull() })
|
|
}
|
|
}
|
|
|
|
return await query
|
|
.orderBy({ 'user.id': order })
|
|
.take(pageSize)
|
|
.skip((currentPage - 1) * pageSize)
|
|
.getManyAndCount()
|
|
} catch (err) {
|
|
throw new LogError('Unable to search users', err)
|
|
} finally {
|
|
await queryRunner.release()
|
|
}
|
|
}
|