From b44ef7175616a9956eec4e7f0d9d49306fa76425 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 17 Mar 2022 10:05:07 +0100 Subject: [PATCH] no double DB calls to get user from db in resolvers --- backend/src/graphql/resolver/BalanceResolver.ts | 6 +----- backend/src/graphql/resolver/GdtResolver.ts | 5 +---- .../graphql/resolver/TransactionLinkResolver.ts | 14 ++++---------- .../src/graphql/resolver/TransactionResolver.ts | 3 +-- 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 12d5b2ba4..09d2fdc92 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -2,9 +2,7 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Resolver, Query, Ctx, Authorized } from 'type-graphql' -import { getCustomRepository } from '@dbTools/typeorm' import { Balance } from '@model/Balance' -import { UserRepository } from '@repository/User' import { calculateDecay } from '@/util/decay' import { RIGHTS } from '@/auth/RIGHTS' import { Transaction } from '@entity/Transaction' @@ -16,9 +14,7 @@ export class BalanceResolver { @Query(() => Balance) async balance(@Ctx() context: any): Promise { // load user and balance - const userRepository = getCustomRepository(UserRepository) - - const user = await userRepository.findByPubkeyHex(context.pubKey) + const { user } = context const now = new Date() const lastTransaction = await Transaction.findOne( diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index c8c4cb331..26ae9b210 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -2,12 +2,10 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Resolver, Query, Args, Ctx, Authorized, Arg } from 'type-graphql' -import { getCustomRepository } from '@dbTools/typeorm' import CONFIG from '@/config' import { GdtEntryList } from '@model/GdtEntryList' import Paginated from '@arg/Paginated' import { apiGet } from '@/apis/HttpRequest' -import { UserRepository } from '@repository/User' import { Order } from '@enum/Order' import { RIGHTS } from '@/auth/RIGHTS' @@ -22,8 +20,7 @@ export class GdtResolver { @Ctx() context: any, ): Promise { // load user - const userRepository = getCustomRepository(UserRepository) - const userEntity = await userRepository.findByPubkeyHex(context.pubKey) + const userEntity = context.user try { const resultGDT = await apiGet( diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 9e2af6111..ead82e182 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -2,11 +2,9 @@ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { Resolver, Args, Arg, Authorized, Ctx, Mutation, Query } from 'type-graphql' -import { getCustomRepository } from '@dbTools/typeorm' import { TransactionLink } from '@model/TransactionLink' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' import { User as dbUser } from '@entity/User' -import { UserRepository } from '@repository/User' import TransactionLinkArgs from '@arg/TransactionLinkArgs' import Paginated from '@arg/Paginated' import { calculateBalance } from '@/util/validate' @@ -42,8 +40,7 @@ export class TransactionLinkResolver { @Args() { amount, memo }: TransactionLinkArgs, @Ctx() context: any, ): Promise { - const userRepository = getCustomRepository(UserRepository) - const user = await userRepository.findByPubkeyHex(context.pubKey) + const { user } = context const createdDate = new Date() const validUntil = transactionLinkExpireDate(createdDate) @@ -74,8 +71,7 @@ export class TransactionLinkResolver { @Authorized([RIGHTS.DELETE_TRANSACTION_LINK]) @Mutation(() => Boolean) async deleteTransactionLink(@Arg('id') id: number, @Ctx() context: any): Promise { - const userRepository = getCustomRepository(UserRepository) - const user = await userRepository.findByPubkeyHex(context.pubKey) + const { user } = context const transactionLink = await dbTransactionLink.findOne({ id }) if (!transactionLink) { @@ -116,8 +112,7 @@ export class TransactionLinkResolver { { currentPage = 1, pageSize = 5, order = Order.DESC }: Paginated, @Ctx() context: any, ): Promise { - const userRepository = getCustomRepository(UserRepository) - const user = await userRepository.findByPubkeyHex(context.pubKey) + const { user } = context // const now = new Date() const transactionLinks = await dbTransactionLink.find({ where: { @@ -137,8 +132,7 @@ export class TransactionLinkResolver { @Authorized([RIGHTS.REDEEM_TRANSACTION_LINK]) @Mutation(() => Boolean) async redeemTransactionLink(@Arg('id') id: number, @Ctx() context: any): Promise { - const userRepository = getCustomRepository(UserRepository) - const user = await userRepository.findByPubkeyHex(context.pubKey) + const { user } = context const transactionLink = await dbTransactionLink.findOneOrFail({ id }) const linkedUser = await dbUser.findOneOrFail({ id: transactionLink.userId }) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index f64ba19e9..258ea9da6 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -256,8 +256,7 @@ export class TransactionResolver { @Ctx() context: any, ): Promise { // TODO this is subject to replay attacks - const userRepository = getCustomRepository(UserRepository) - const senderUser = await userRepository.findByPubkeyHex(context.pubKey) + const senderUser = context.user if (senderUser.pubKey.length !== 32) { throw new Error('invalid sender public key') }