diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index 0d1e6db9a..0fb3c198f 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -55,6 +55,7 @@ import { TRANSACTIONS_LOCK } from '@/util/TRANSACTIONS_LOCK' import LogError from '@/server/LogError' import { getLastTransaction } from './util/getLastTransaction' +import { findContributions } from './util/findContributions' @Resolver() export class ContributionResolver { @@ -167,25 +168,14 @@ export class ContributionResolver { @Arg('statusFilter', () => [ContributionStatus], { nullable: true }) statusFilter?: ContributionStatus[], ): Promise { - const where: { - contributionStatus?: FindOperator | null - } = {} + const [dbContributions, count] = await findContributions( + order, + currentPage, + pageSize, + false, + statusFilter, + ) - if (statusFilter && statusFilter.length) { - where.contributionStatus = In(statusFilter) - } - - const [dbContributions, count] = await getConnection() - .createQueryBuilder() - .select('c') - .from(DbContribution, 'c') - .innerJoinAndSelect('c.user', 'u') - .leftJoinAndSelect('c.messages', 'm') - .where(where) - .orderBy('c.createdAt', order) - .limit(pageSize) - .offset((currentPage - 1) * pageSize) - .getManyAndCount() return new ContributionListResult( count, dbContributions.map((contribution) => new Contribution(contribution, contribution.user)), @@ -431,18 +421,13 @@ export class ContributionResolver { @Arg('statusFilter', () => [ContributionStatus], { nullable: true }) statusFilter?: ContributionStatus[], ): Promise { - const [dbContributions, count] = await DbContribution.findAndCount({ - where: { - ...(statusFilter && statusFilter.length && { contributionStatus: In(statusFilter) }), - }, - withDeleted: true, - order: { - createdAt: order, - }, - relations: ['user'], - skip: (currentPage - 1) * pageSize, - take: pageSize, - }) + const [dbContributions, count] = await findContributions( + order, + currentPage, + pageSize, + true, + statusFilter, + ) return new ContributionListResult( count, diff --git a/backend/src/graphql/resolver/util/findContributions.ts b/backend/src/graphql/resolver/util/findContributions.ts new file mode 100644 index 000000000..0dc70cf30 --- /dev/null +++ b/backend/src/graphql/resolver/util/findContributions.ts @@ -0,0 +1,24 @@ +import { ContributionStatus } from '@enum/ContributionStatus' +import { Order } from '@enum/Order' +import { Contribution as DbContribution } from '@entity/Contribution' +import { In } from '@dbTools/typeorm' + +export const findContributions = async ( + order: Order, + currentPage: number, + pageSize: number, + withDeleted: boolean, + statusFilter?: ContributionStatus[], +): Promise<[DbContribution[], number]> => + DbContribution.findAndCount({ + where: { + ...(statusFilter && statusFilter.length && { contributionStatus: In(statusFilter) }), + }, + withDeleted: withDeleted, + order: { + createdAt: order, + }, + relations: ['user'], + skip: (currentPage - 1) * pageSize, + take: pageSize, + })