add query to find contributions, change relations to object notation

This commit is contained in:
Moriz Wahl 2023-06-28 14:26:46 +02:00
parent 616455b709
commit 32b6b0bee9
3 changed files with 57 additions and 12 deletions

View File

@ -138,7 +138,7 @@ export class ContributionResolver {
currentPage,
pageSize,
withDeleted: true,
relations: ['messages'],
relations: { messages: true },
userId: user.id,
statusFilter,
})
@ -160,7 +160,7 @@ export class ContributionResolver {
order,
currentPage,
pageSize,
relations: ['user'],
relations: { user: true },
statusFilter,
})
@ -372,6 +372,8 @@ export class ContributionResolver {
statusFilter?: ContributionStatus[] | null,
@Arg('userId', () => Int, { nullable: true })
userId?: number | null,
@Arg('query', () => String, { nullable: true })
query?: string | null,
): Promise<ContributionListResult> {
const [dbContributions, count] = await findContributions({
order,
@ -379,8 +381,14 @@ export class ContributionResolver {
pageSize,
withDeleted: true,
userId,
relations: ['user', 'messages'],
relations: {
user: {
emailContact: true,
},
messages: true,
},
statusFilter,
query,
})
return new ContributionListResult(

View File

@ -1,38 +1,73 @@
import { In } from '@dbTools/typeorm'
import { In, Like } from '@dbTools/typeorm'
import { Contribution as DbContribution } from '@entity/Contribution'
import { ContributionStatus } from '@enum/ContributionStatus'
import { Order } from '@enum/Order'
interface Relations {
[key: string]: boolean | Relations
}
interface FindContributionsOptions {
order: Order
currentPage: number
pageSize: number
withDeleted?: boolean
relations?: string[]
relations?: Relations | undefined
userId?: number | null
statusFilter?: ContributionStatus[] | null
query?: string | null
}
export const findContributions = async (
options: FindContributionsOptions,
): Promise<[DbContribution[], number]> => {
const { order, currentPage, pageSize, withDeleted, relations, userId, statusFilter } = {
const { order, currentPage, pageSize, withDeleted, relations, userId, statusFilter, query } = {
withDeleted: false,
relations: [],
relations: undefined,
query: '',
...options,
}
const requiredWhere = {
...(statusFilter?.length && { contributionStatus: In(statusFilter) }),
...(userId && { userId }),
}
const where =
query && relations && relations.user
? [
{
...requiredWhere,
user: {
firstName: Like(`%${query}%`),
},
},
{
...requiredWhere,
user: {
lastName: Like(`%${query}%`),
},
},
{
...requiredWhere,
user: {
emailContact: {
email: Like(`%${query}%`),
},
},
},
]
: requiredWhere
return DbContribution.findAndCount({
where: {
...(statusFilter?.length && { contributionStatus: In(statusFilter) }),
...(userId && { userId }),
},
relations,
where,
withDeleted,
order: {
createdAt: order,
id: order,
},
relations,
skip: (currentPage - 1) * pageSize,
take: pageSize,
})

View File

@ -235,6 +235,7 @@ export const adminListContributions = gql`
$order: Order = DESC
$statusFilter: [ContributionStatus!]
$userId: Int
$query: String
) {
adminListContributions(
currentPage: $currentPage
@ -242,6 +243,7 @@ export const adminListContributions = gql`
order: $order
statusFilter: $statusFilter
userId: $userId
query: $query
) {
contributionCount
contributionList {