From 27ad1d2e229ac11d6ddeb577bc356adf07367616 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 29 Mar 2022 01:54:13 +0200 Subject: [PATCH] transaction list model contains balance, user balance resolver to create transacton list result --- backend/src/graphql/model/TransactionList.ts | 32 +++--------------- .../src/graphql/resolver/BalanceResolver.ts | 33 +++++++++++-------- .../graphql/resolver/TransactionResolver.ts | 23 +++++-------- 3 files changed, 32 insertions(+), 56 deletions(-) diff --git a/backend/src/graphql/model/TransactionList.ts b/backend/src/graphql/model/TransactionList.ts index 9e8356747..888c30dc7 100644 --- a/backend/src/graphql/model/TransactionList.ts +++ b/backend/src/graphql/model/TransactionList.ts @@ -1,40 +1,16 @@ import { ObjectType, Field } from 'type-graphql' -import CONFIG from '@/config' -import Decimal from 'decimal.js-light' import { Transaction } from './Transaction' +import { Balance } from './Balance' @ObjectType() export class TransactionList { - constructor( - balance: Decimal, - transactions: Transaction[], - count: number, - linkCount: number, - balanceGDT?: number | null, - decayStartBlock: Date = CONFIG.DECAY_START_TIME, - ) { + constructor(balance: Balance, transactions: Transaction[]) { this.balance = balance this.transactions = transactions - this.count = count - this.linkCount = linkCount - this.balanceGDT = balanceGDT || null - this.decayStartBlock = decayStartBlock } - @Field(() => Number, { nullable: true }) - balanceGDT: number | null - - @Field(() => Number) - count: number - - @Field(() => Number) - linkCount: number - - @Field(() => Decimal) - balance: Decimal - - @Field(() => Date) - decayStartBlock: Date + @Field(() => Balance) + balance: Balance @Field(() => [Transaction]) transactions: Transaction[] diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index dfaafc8e0..f206cb0b9 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -23,10 +23,9 @@ export class BalanceResolver { const gdtResolver = new GdtResolver() const balanceGDT = await gdtResolver.gdtBalance(context) - const lastTransaction = await Transaction.findOne( - { userId: user.id }, - { order: { balanceDate: 'DESC' } }, - ) + const lastTransaction = context.lastTransaction + ? context.lastTransaction + : await Transaction.findOne({ userId: user.id }, { order: { balanceDate: 'DESC' } }) // No balance found if (!lastTransaction) { @@ -40,17 +39,25 @@ export class BalanceResolver { }) } - 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 count = + context.count || context.count === 0 + ? context.count + : await dbTransaction.count({ where: { userId: user.id } }) + const linkCount = + context.linkCount || context.linkCount === 0 + ? context.linkCount + : await dbTransactionLink.count({ + where: { + userId: user.id, + redeemedAt: null, + validUntil: MoreThan(new Date()), + }, + }) const transactionLinkRepository = getCustomRepository(TransactionLinkRepository) - const { sumHoldAvailableAmount } = await transactionLinkRepository.summary(user.id, now) + const { sumHoldAvailableAmount } = context.sumHoldAvailableAmount + ? { sumHoldAvailableAmount: context.sumHoldAvailableAmount } + : await transactionLinkRepository.summary(user.id, now) const calculatedDecay = calculateDecay( lastTransaction.balance.minus(sumHoldAvailableAmount.toString()), diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 00b47658b..bb7a5c2f6 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -30,9 +30,8 @@ import { User } from '@model/User' import { communityUser } from '@/util/communityUser' import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions' import Decimal from 'decimal.js-light' -import { calculateDecay } from '@/util/decay' -import { GdtResolver } from './GdtResolver' +import { BalanceResolver } from './BalanceResolver' const MEMO_MAX_CHARS = 255 const MEMO_MIN_CHARS = 5 @@ -154,12 +153,11 @@ export class TransactionResolver { { order: { balanceDate: 'DESC' } }, ) - // get GDT - const gdtResolver = new GdtResolver() - const balanceGDT = await gdtResolver.gdtBalance(context) + const balanceResolver = new BalanceResolver() + context.lastTransaction = lastTransaction if (!lastTransaction) { - return new TransactionList(new Decimal(0), [], 0, 0, balanceGDT) + return new TransactionList(await balanceResolver.balance(context), []) } // find transactions @@ -172,6 +170,7 @@ export class TransactionResolver { offset, order, ) + context.count = userTransactionsCount // find involved users; I am involved const involvedUserIds: number[] = [user.id] @@ -194,6 +193,8 @@ export class TransactionResolver { const transactionLinkRepository = getCustomRepository(TransactionLinkRepository) const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, transactionLinkcount } = await transactionLinkRepository.summary(user.id, now) + context.linkCount = transactionLinkcount + context.sumHoldAvailableAmount = sumHoldAvailableAmount // decay & link transactions if (currentPage === 1 && order === Order.DESC) { @@ -226,15 +227,7 @@ export class TransactionResolver { }) // Construct Result - return new TransactionList( - calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, now).balance.minus( - sumHoldAvailableAmount.toString(), - ), - transactions, - userTransactionsCount, - transactionLinkcount, - balanceGDT, - ) + return new TransactionList(await balanceResolver.balance(context), transactions) } @Authorized([RIGHTS.SEND_COINS])