mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
refactor resolvers to use balance resolver and model
This commit is contained in:
parent
f46bd23c11
commit
a1ac6600b7
@ -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,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user