From b604be584780e774789e3a52dd333cb0c6011e4f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 7 Mar 2023 17:16:53 +0100 Subject: [PATCH 01/12] object as arg for find contributions --- .../graphql/resolver/ContributionResolver.ts | 27 +++++++++---------- .../resolver/util/findContributions.ts | 27 ++++++++++++------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index ab177d759..5946b0237 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -135,15 +135,15 @@ export class ContributionResolver { ): Promise { const user = getUser(context) - const [dbContributions, count] = await findContributions( + const [dbContributions, count] = await findContributions({ order, currentPage, pageSize, - true, - ['messages'], - user.id, + withDeleted: true, + relations: ['messages'], + userId: user.id, statusFilter, - ) + }) return new ContributionListResult( count, dbContributions.map((contribution) => new Contribution(contribution, user)), @@ -158,15 +158,13 @@ export class ContributionResolver { @Arg('statusFilter', () => [ContributionStatus], { nullable: true }) statusFilter?: ContributionStatus[], ): Promise { - const [dbContributions, count] = await findContributions( + const [dbContributions, count] = await findContributions({ order, currentPage, pageSize, - false, - ['user'], - undefined, + relations: ['user'], statusFilter, - ) + }) return new ContributionListResult( count, @@ -386,15 +384,14 @@ export class ContributionResolver { @Arg('statusFilter', () => [ContributionStatus], { nullable: true }) statusFilter?: ContributionStatus[], ): Promise { - const [dbContributions, count] = await findContributions( + const [dbContributions, count] = await findContributions({ order, currentPage, pageSize, - true, - ['user'], - undefined, + withDeleted: true, + relations: ['user'], statusFilter, - ) + }) return new ContributionListResult( count, diff --git a/backend/src/graphql/resolver/util/findContributions.ts b/backend/src/graphql/resolver/util/findContributions.ts index 5201284aa..48f08f041 100644 --- a/backend/src/graphql/resolver/util/findContributions.ts +++ b/backend/src/graphql/resolver/util/findContributions.ts @@ -3,16 +3,24 @@ import { Order } from '@enum/Order' import { Contribution as DbContribution } from '@entity/Contribution' import { In } from '@dbTools/typeorm' +interface FindContributionsOptions { + order: Order + currentPage: number + pageSize: number + withDeleted?: boolean + relations?: string[] + userId?: number + statusFilter?: ContributionStatus[] +} + export const findContributions = async ( - order: Order, - currentPage: number, - pageSize: number, - withDeleted: boolean, - relations: string[], - userId?: number, - statusFilter?: ContributionStatus[], -): Promise<[DbContribution[], number]> => - DbContribution.findAndCount({ + options: FindContributionsOptions, +): Promise<[DbContribution[], number]> => { + const { order, currentPage, pageSize, withDeleted, relations, userId, statusFilter } = { + withDeleted: false, + ...options, + } + return DbContribution.findAndCount({ where: { ...(statusFilter && statusFilter.length && { contributionStatus: In(statusFilter) }), ...(userId && { userId }), @@ -26,3 +34,4 @@ export const findContributions = async ( skip: (currentPage - 1) * pageSize, take: pageSize, }) +} From e48bbd7b47baf70857aac67506018b1aa52e29ae Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 7 Mar 2023 17:33:18 +0100 Subject: [PATCH 02/12] rename admin list all contributions query --- ...ributions.js => adminListContributions.js} | 4 ++-- admin/src/pages/CreationConfirm.spec.js | 20 +++++++++---------- admin/src/pages/CreationConfirm.vue | 10 +++++----- admin/src/pages/Overview.spec.js | 14 ++++++------- admin/src/pages/Overview.vue | 8 ++++---- backend/src/auth/RIGHTS.ts | 2 +- .../resolver/ContributionResolver.test.ts | 20 +++++++++---------- .../graphql/resolver/ContributionResolver.ts | 6 +++--- backend/src/seeds/graphql/queries.ts | 4 ++-- 9 files changed, 44 insertions(+), 44 deletions(-) rename admin/src/graphql/{adminListAllContributions.js => adminListContributions.js} (88%) diff --git a/admin/src/graphql/adminListAllContributions.js b/admin/src/graphql/adminListContributions.js similarity index 88% rename from admin/src/graphql/adminListAllContributions.js rename to admin/src/graphql/adminListContributions.js index cd47cd1d4..7b6848bd5 100644 --- a/admin/src/graphql/adminListAllContributions.js +++ b/admin/src/graphql/adminListContributions.js @@ -1,13 +1,13 @@ import gql from 'graphql-tag' -export const adminListAllContributions = gql` +export const adminListContributions = gql` query ( $currentPage: Int = 1 $pageSize: Int = 25 $order: Order = DESC $statusFilter: [ContributionStatus!] ) { - adminListAllContributions( + adminListContributions( currentPage: $currentPage pageSize: $pageSize order: $order diff --git a/admin/src/pages/CreationConfirm.spec.js b/admin/src/pages/CreationConfirm.spec.js index 87f94e91f..c9d9661c2 100644 --- a/admin/src/pages/CreationConfirm.spec.js +++ b/admin/src/pages/CreationConfirm.spec.js @@ -2,7 +2,7 @@ import { mount } from '@vue/test-utils' import CreationConfirm from './CreationConfirm' import { adminDeleteContribution } from '../graphql/adminDeleteContribution' import { denyContribution } from '../graphql/denyContribution' -import { adminListAllContributions } from '../graphql/adminListAllContributions' +import { adminListContributions } from '../graphql/adminListContributions' import { confirmContribution } from '../graphql/confirmContribution' import { toastErrorSpy, toastSuccessSpy } from '../../test/testSetup' import VueApollo from 'vue-apollo' @@ -38,7 +38,7 @@ const mocks = { const defaultData = () => { return { - adminListAllContributions: { + adminListContributions: { contributionCount: 2, contributionList: [ { @@ -92,14 +92,14 @@ const defaultData = () => { describe('CreationConfirm', () => { let wrapper - const adminListAllContributionsMock = jest.fn() + const adminListContributionsMock = jest.fn() const adminDeleteContributionMock = jest.fn() const adminDenyContributionMock = jest.fn() const confirmContributionMock = jest.fn() mockClient.setRequestHandler( - adminListAllContributions, - adminListAllContributionsMock + adminListContributions, + adminListContributionsMock .mockRejectedValueOnce({ message: 'Ouch!' }) .mockResolvedValue({ data: defaultData() }), ) @@ -337,7 +337,7 @@ describe('CreationConfirm', () => { }) it('refetches contributions with proper filter', () => { - expect(adminListAllContributionsMock).toBeCalledWith({ + expect(adminListContributionsMock).toBeCalledWith({ currentPage: 1, order: 'DESC', pageSize: 25, @@ -352,7 +352,7 @@ describe('CreationConfirm', () => { }) it('refetches contributions with proper filter', () => { - expect(adminListAllContributionsMock).toBeCalledWith({ + expect(adminListContributionsMock).toBeCalledWith({ currentPage: 1, order: 'DESC', pageSize: 25, @@ -368,7 +368,7 @@ describe('CreationConfirm', () => { }) it('refetches contributions with proper filter', () => { - expect(adminListAllContributionsMock).toBeCalledWith({ + expect(adminListContributionsMock).toBeCalledWith({ currentPage: 1, order: 'DESC', pageSize: 25, @@ -384,7 +384,7 @@ describe('CreationConfirm', () => { }) it('refetches contributions with proper filter', () => { - expect(adminListAllContributionsMock).toBeCalledWith({ + expect(adminListContributionsMock).toBeCalledWith({ currentPage: 1, order: 'DESC', pageSize: 25, @@ -400,7 +400,7 @@ describe('CreationConfirm', () => { }) it('refetches contributions with proper filter', () => { - expect(adminListAllContributionsMock).toBeCalledWith({ + expect(adminListContributionsMock).toBeCalledWith({ currentPage: 1, order: 'DESC', pageSize: 25, diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue index 55b819268..aad03ffde 100644 --- a/admin/src/pages/CreationConfirm.vue +++ b/admin/src/pages/CreationConfirm.vue @@ -73,7 +73,7 @@