refactor resolvers to use balance resolver and model

This commit is contained in:
Moriz Wahl 2022-03-23 19:06:12 +01:00
parent f46bd23c11
commit a1ac6600b7
3 changed files with 39 additions and 12 deletions

View File

@ -5,18 +5,23 @@ import { Resolver, Query, Ctx, Authorized } from 'type-graphql'
import { Balance } from '@model/Balance' import { Balance } from '@model/Balance'
import { calculateDecay } from '@/util/decay' import { calculateDecay } from '@/util/decay'
import { RIGHTS } from '@/auth/RIGHTS' 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 Decimal from 'decimal.js-light'
import { GdtResolver } from './GdtResolver'
import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink'
import { MoreThan } from '@dbTools/typeorm'
@Resolver() @Resolver()
export class BalanceResolver { export class BalanceResolver {
@Authorized([RIGHTS.BALANCE]) @Authorized([RIGHTS.BALANCE])
@Query(() => Balance) @Query(() => Balance)
async balance(@Ctx() context: any): Promise<Balance> { async balance(@Ctx() context: any): Promise<Balance> {
// load user and balance
const { user } = context const { user } = context
const now = new Date() const now = new Date()
const gdtResolver = new GdtResolver()
const balanceGDT = await gdtResolver.gdtSum(context)
const lastTransaction = await Transaction.findOne( const lastTransaction = await Transaction.findOne(
{ userId: user.id }, { userId: user.id },
{ order: { balanceDate: 'DESC' } }, { order: { balanceDate: 'DESC' } },
@ -27,14 +32,36 @@ export class BalanceResolver {
return new Balance({ return new Balance({
balance: new Decimal(0), balance: new Decimal(0),
decay: 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({ return new Balance({
balance: lastTransaction.balance, balance: calculatedDecay.balance,
decay: calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, now).balance, decay: calculatedDecay.decay,
decay_date: now.toString(), lastBookedBalance: lastTransaction.balance,
balanceGDT,
count,
linkCount,
lastBookedDate: lastTransaction.balanceDate,
}) })
} }
} }

View File

@ -5,7 +5,7 @@ import { Resolver, Query, Args, Ctx, Authorized, Arg } from 'type-graphql'
import CONFIG from '@/config' import CONFIG from '@/config'
import { GdtEntryList } from '@model/GdtEntryList' import { GdtEntryList } from '@model/GdtEntryList'
import Paginated from '@arg/Paginated' import Paginated from '@arg/Paginated'
import { apiGet } from '@/apis/HttpRequest' import { apiGet, apiPost } from '@/apis/HttpRequest'
import { Order } from '@enum/Order' import { Order } from '@enum/Order'
import { RIGHTS } from '@/auth/RIGHTS' import { RIGHTS } from '@/auth/RIGHTS'
@ -34,7 +34,7 @@ export class GdtResolver {
} }
@Authorized([RIGHTS.GDT_SUM]) @Authorized([RIGHTS.GDT_SUM])
@Query(() => Number | null) @Query(() => Number)
async gdtSum(@Ctx() context: any): Promise<number | null> { async gdtSum(@Ctx() context: any): Promise<number | null> {
const { user } = context const { user } = context
try { try {
@ -48,7 +48,7 @@ export class GdtResolver {
} catch (err: any) { } catch (err: any) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log('Could not query GDT Server', err) console.log('Could not query GDT Server', err)
return null return 0
} }
} }

View File

@ -32,7 +32,7 @@ import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualT
import Decimal from 'decimal.js-light' import Decimal from 'decimal.js-light'
import { calculateDecay } from '@/util/decay' import { calculateDecay } from '@/util/decay'
import GdtResolver from './GdtResolver' import { GdtResolver } from './GdtResolver'
export const executeTransaction = async ( export const executeTransaction = async (
amount: Decimal, amount: Decimal,
@ -143,8 +143,8 @@ export class TransactionResolver {
) )
// get GDT // get GDT
gdtResolver = new GdtResolver() const gdtResolver = new GdtResolver()
const balanceGDT = await gdtResolver.gdtSum() const balanceGDT = await gdtResolver.gdtSum(context)
if (!lastTransaction) { if (!lastTransaction) {
return new TransactionList(new Decimal(0), [], 0, 0, balanceGDT) return new TransactionList(new Decimal(0), [], 0, 0, balanceGDT)