From a1ac6600b7b79c393448ee9f6ee04475f697c623 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 23 Mar 2022 19:06:12 +0100 Subject: [PATCH] refactor resolvers to use balance resolver and model --- .../src/graphql/resolver/BalanceResolver.ts | 39 ++++++++++++++++--- backend/src/graphql/resolver/GdtResolver.ts | 6 +-- .../graphql/resolver/TransactionResolver.ts | 6 +-- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 09d2fdc92..5093d4347 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -5,18 +5,23 @@ import { Resolver, Query, Ctx, Authorized } from 'type-graphql' import { Balance } from '@model/Balance' import { calculateDecay } from '@/util/decay' import { RIGHTS } from '@/auth/RIGHTS' -import { Transaction } from '@entity/Transaction' +import { Transaction, Transaction as dbTransaction } from '@entity/Transaction' import Decimal from 'decimal.js-light' +import { GdtResolver } from './GdtResolver' +import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' +import { MoreThan } from '@dbTools/typeorm' @Resolver() export class BalanceResolver { @Authorized([RIGHTS.BALANCE]) @Query(() => Balance) async balance(@Ctx() context: any): Promise { - // load user and balance const { user } = context const now = new Date() + const gdtResolver = new GdtResolver() + const balanceGDT = await gdtResolver.gdtSum(context) + const lastTransaction = await Transaction.findOne( { userId: user.id }, { order: { balanceDate: 'DESC' } }, @@ -27,14 +32,36 @@ export class BalanceResolver { return new Balance({ balance: new Decimal(0), decay: new Decimal(0), - decay_date: now.toString(), + lastBookedBalance: new Decimal(0), + balanceGDT, + count: 0, + linkCount: 0, }) } + const count = await dbTransaction.count({ where: { userId: user.id } }) + const linkCount = await dbTransactionLink.count({ + where: { + userId: user.id, + redeemedAt: null, + validUntil: MoreThan(new Date()), + }, + }) + + const calculatedDecay = calculateDecay( + lastTransaction.balance, + lastTransaction.balanceDate, + now, + ) + return new Balance({ - balance: lastTransaction.balance, - decay: calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, now).balance, - decay_date: now.toString(), + balance: calculatedDecay.balance, + decay: calculatedDecay.decay, + lastBookedBalance: lastTransaction.balance, + balanceGDT, + count, + linkCount, + lastBookedDate: lastTransaction.balanceDate, }) } } diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 302b17a4a..a563a0845 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -5,7 +5,7 @@ import { Resolver, Query, Args, Ctx, Authorized, Arg } from 'type-graphql' import CONFIG from '@/config' import { GdtEntryList } from '@model/GdtEntryList' import Paginated from '@arg/Paginated' -import { apiGet } from '@/apis/HttpRequest' +import { apiGet, apiPost } from '@/apis/HttpRequest' import { Order } from '@enum/Order' import { RIGHTS } from '@/auth/RIGHTS' @@ -34,7 +34,7 @@ export class GdtResolver { } @Authorized([RIGHTS.GDT_SUM]) - @Query(() => Number | null) + @Query(() => Number) async gdtSum(@Ctx() context: any): Promise { const { user } = context try { @@ -48,7 +48,7 @@ export class GdtResolver { } catch (err: any) { // eslint-disable-next-line no-console console.log('Could not query GDT Server', err) - return null + return 0 } } diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 3164eaf8e..8109ba70a 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -32,7 +32,7 @@ import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualT import Decimal from 'decimal.js-light' import { calculateDecay } from '@/util/decay' -import GdtResolver from './GdtResolver' +import { GdtResolver } from './GdtResolver' export const executeTransaction = async ( amount: Decimal, @@ -143,8 +143,8 @@ export class TransactionResolver { ) // get GDT - gdtResolver = new GdtResolver() - const balanceGDT = await gdtResolver.gdtSum() + const gdtResolver = new GdtResolver() + const balanceGDT = await gdtResolver.gdtSum(context) if (!lastTransaction) { return new TransactionList(new Decimal(0), [], 0, 0, balanceGDT)