diff --git a/backend/src/graphql/model/Contribution.ts b/backend/src/graphql/model/Contribution.ts index 1f690a3d8..cf57e632f 100644 --- a/backend/src/graphql/model/Contribution.ts +++ b/backend/src/graphql/model/Contribution.ts @@ -5,7 +5,7 @@ import { User } from '@entity/User' @ObjectType() export class Contribution { - constructor(contribution: dbContribution, user: User) { + constructor(contribution: dbContribution, user?: User | null) { this.id = contribution.id this.firstName = user ? user.firstName : null this.lastName = user ? user.lastName : null diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index d71ffc72c..d5293dcce 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -17,6 +17,7 @@ import { AdminCreateContributions } from '@model/AdminCreateContributions' import { AdminUpdateContribution } from '@model/AdminUpdateContribution' import { ContributionLink } from '@model/ContributionLink' import { ContributionLinkList } from '@model/ContributionLinkList' +import { Contribution } from '@model/Contribution' import { RIGHTS } from '@/auth/RIGHTS' import { UserRepository } from '@repository/User' import AdminCreateContributionArgs from '@arg/AdminCreateContributionArgs' @@ -30,7 +31,7 @@ import { TransactionLink, TransactionLinkResult } from '@model/TransactionLink' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' import { TransactionRepository } from '@repository/Transaction' import { calculateDecay } from '@/util/decay' -import { Contribution } from '@entity/Contribution' +import { Contribution as DbContribution } from '@entity/Contribution' import { hasElopageBuys } from '@/util/hasElopageBuys' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' import { User as dbUser } from '@entity/User' @@ -68,6 +69,7 @@ import { ContributionMessageType } from '@enum/MessageType' import { ContributionMessage } from '@model/ContributionMessage' import { sendContributionConfirmedEmail } from '@/mailer/sendContributionConfirmedEmail' import { sendAddedContributionMessageEmail } from '@/mailer/sendAddedContributionMessageEmail' +import { ContributionListResult } from '../model/Contribution' // const EMAIL_OPT_IN_REGISTER = 1 // const EMAIL_OPT_UNKNOWN = 3 // elopage? @@ -261,7 +263,7 @@ export class AdminResolver { logger.trace('creations', creations) const creationDateObj = new Date(creationDate) validateContribution(creations, amount, creationDateObj) - const contribution = Contribution.create() + const contribution = DbContribution.create() contribution.userId = user.id contribution.amount = amount contribution.createdAt = new Date() @@ -272,7 +274,7 @@ export class AdminResolver { contribution.contributionStatus = ContributionStatus.PENDING logger.trace('contribution to save', contribution) - await Contribution.save(contribution) + await DbContribution.save(contribution) return getUserCreation(user.id) } @@ -319,7 +321,7 @@ export class AdminResolver { const moderator = getUser(context) - const contributionToUpdate = await Contribution.findOne({ + const contributionToUpdate = await DbContribution.findOne({ where: { id, confirmedAt: IsNull() }, }) @@ -349,7 +351,7 @@ export class AdminResolver { contributionToUpdate.moderatorId = moderator.id contributionToUpdate.contributionStatus = ContributionStatus.PENDING - await Contribution.save(contributionToUpdate) + await DbContribution.save(contributionToUpdate) const result = new AdminUpdateContribution() result.amount = amount result.memo = contributionToUpdate.memo @@ -366,7 +368,7 @@ export class AdminResolver { const contributions = await getConnection() .createQueryBuilder() .select('c') - .from(Contribution, 'c') + .from(DbContribution, 'c') .leftJoinAndSelect('c.messages', 'm') .where({ confirmedAt: IsNull() }) .getMany() @@ -394,7 +396,7 @@ export class AdminResolver { @Authorized([RIGHTS.ADMIN_DELETE_CONTRIBUTION]) @Mutation(() => Boolean) async adminDeleteContribution(@Arg('id', () => Int) id: number): Promise { - const contribution = await Contribution.findOne(id) + const contribution = await DbContribution.findOne(id) if (!contribution) { throw new Error('Contribution not found for given id.') } @@ -410,7 +412,7 @@ export class AdminResolver { @Arg('id', () => Int) id: number, @Ctx() context: Context, ): Promise { - const contribution = await Contribution.findOne(id) + const contribution = await DbContribution.findOne(id) if (!contribution) { throw new Error('Contribution not found to given id.') } @@ -468,7 +470,7 @@ export class AdminResolver { contribution.confirmedBy = moderatorUser.id contribution.transactionId = transaction.id contribution.contributionStatus = ContributionStatus.CONFIRMED - await queryRunner.manager.update(Contribution, { id: contribution.id }, contribution) + await queryRunner.manager.update(DbContribution, { id: contribution.id }, contribution) await queryRunner.commitTransaction() logger.info('creation commited successfuly.') @@ -493,24 +495,29 @@ export class AdminResolver { } @Authorized([RIGHTS.CREATION_TRANSACTION_LIST]) - @Query(() => [Transaction]) + @Query(() => ContributionListResult) async creationTransactionList( @Args() { currentPage = 1, pageSize = 25, order = Order.DESC }: Paginated, @Arg('userId', () => Int) userId: number, - ): Promise { + ): Promise { const offset = (currentPage - 1) * pageSize - const transactionRepository = getCustomRepository(TransactionRepository) - const [userTransactions] = await transactionRepository.findByUserPaged( - userId, - pageSize, - offset, - order, - true, - ) + const [contributionResult, count] = await getConnection() + .createQueryBuilder() + .select('c') + .from(DbContribution, 'c') + .leftJoinAndSelect('c.user', 'u') + .where(`user_id = ${userId}`) + .limit(pageSize) + .offset(offset) + .orderBy('c.created_at', order) + .getManyAndCount() - const user = await dbUser.findOneOrFail({ id: userId }) - return userTransactions.map((t) => new Transaction(t, new User(user), communityUser)) + return new ContributionListResult( + count, + contributionResult.map((contribution) => new Contribution(contribution, contribution.user)), + ) + // return userTransactions.map((t) => new Transaction(t, new User(user), communityUser)) } @Authorized([RIGHTS.SEND_ACTIVATION_EMAIL]) @@ -725,7 +732,7 @@ export class AdminResolver { await queryRunner.startTransaction('READ UNCOMMITTED') const contributionMessage = DbContributionMessage.create() try { - const contribution = await Contribution.findOne({ + const contribution = await DbContribution.findOne({ where: { id: contributionId }, relations: ['user'], }) @@ -749,7 +756,7 @@ export class AdminResolver { contribution.contributionStatus === ContributionStatus.PENDING ) { contribution.contributionStatus = ContributionStatus.IN_PROGRESS - await queryRunner.manager.update(Contribution, { id: contributionId }, contribution) + await queryRunner.manager.update(DbContribution, { id: contributionId }, contribution) } await queryRunner.commitTransaction()