transaction list model contains balance, user balance resolver to create transacton list result

This commit is contained in:
Moriz Wahl 2022-03-29 01:54:13 +02:00
parent dc30315311
commit 27ad1d2e22
3 changed files with 32 additions and 56 deletions

View File

@ -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[]

View File

@ -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()),

View File

@ -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])