From 466b755a3da64900c4da800b1d88875af8b644cf Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 3 Apr 2023 15:55:15 +0200 Subject: [PATCH] middleware to ensure best possible decay displayed --- .../graphql/resolver/TransactionResolver.ts | 4 +++- backend/src/middleware/fixDecayCalculation.ts | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 backend/src/middleware/fixDecayCalculation.ts diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index d855a0701..a968a9ebb 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -7,7 +7,7 @@ import { Transaction as dbTransaction } from '@entity/Transaction' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' import { User as dbUser } from '@entity/User' import { Decimal } from 'decimal.js-light' -import { Resolver, Query, Args, Authorized, Ctx, Mutation } from 'type-graphql' +import { Resolver, Query, Args, Authorized, Ctx, Mutation, UseMiddleware } from 'type-graphql' import Paginated from '@arg/Paginated' import TransactionSendArgs from '@arg/TransactionSendArgs' @@ -25,6 +25,7 @@ import { sendTransactionReceivedEmail, } from '@/emails/sendEmailVariants' import { EVENT_TRANSACTION_RECEIVE, EVENT_TRANSACTION_SEND } from '@/event/Event' +import { fixDecayCalculation } from '@/middleware/fixDecayCalculation' import { Context, getUser } from '@/server/context' import LogError from '@/server/LogError' import { backendLogger as logger } from '@/server/logger' @@ -184,6 +185,7 @@ export const executeTransaction = async ( export class TransactionResolver { @Authorized([RIGHTS.TRANSACTION_LIST]) @Query(() => TransactionList) + @UseMiddleware(fixDecayCalculation) async transactionList( @Args() { currentPage = 1, pageSize = 25, order = Order.DESC }: Paginated, diff --git a/backend/src/middleware/fixDecayCalculation.ts b/backend/src/middleware/fixDecayCalculation.ts new file mode 100644 index 000000000..7d25b7484 --- /dev/null +++ b/backend/src/middleware/fixDecayCalculation.ts @@ -0,0 +1,24 @@ +import { Decimal } from 'decimal.js-light' +import { MiddlewareFn } from 'type-graphql' + +import { TransactionTypeId } from '@enum/TransactionTypeId' +import { Transaction } from '@model/Transaction' +import { TransactionList } from '@model/TransactionList' + +export const fixDecayCalculation: MiddlewareFn = async ( + /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ + { root, args, context, info }, + next, +) => { + const result: TransactionList = (await next()) as TransactionList + const { transactions } = result + transactions.forEach((transaction: Transaction) => { + if (transaction.typeId !== TransactionTypeId.DECAY) { + const { balance, previousBalance, amount } = transaction + transaction.decay.decay = new Decimal( + Number(balance) - Number(amount) - Number(previousBalance), + ).toDecimalPlaces(2, Decimal.ROUND_HALF_UP) + } + }) + return result +}