fixed sendcoins

This commit is contained in:
Ulf Gebhardt 2022-02-28 01:29:53 +01:00
parent c60518d39d
commit 5f0cb6dbfe
Signed by: ulfgebhardt
GPG Key ID: DA6B843E748679C9
6 changed files with 25 additions and 17 deletions

View File

@ -7,7 +7,7 @@ import Decimal from 'decimal.js-light'
export class Decay {
constructor(
balance: Decimal,
decay: Decimal | null,
decay: Decimal,
start: Date | null,
end: Date | null,
duration: number | null,
@ -22,8 +22,8 @@ export class Decay {
@Field(() => Decimal)
balance: Decimal
@Field(() => Decimal, { nullable: true })
decay: Decimal | null
@Field(() => Decimal)
decay: Decimal
@Field(() => Date, { nullable: true })
start: Date | null

View File

@ -18,7 +18,7 @@ export class Transaction {
this.balance = transaction.balance
this.balanceDate = transaction.balanceDate
if (!transaction.decayStart) {
this.decay = new Decay(transaction.balance, null, null, null, null)
this.decay = new Decay(transaction.balance, new Decimal(0), null, null, null)
} else {
this.decay = new Decay(
transaction.balance,

View File

@ -30,6 +30,7 @@ import { RIGHTS } from '../../auth/RIGHTS'
import { User } from '../model/User'
import { communityUser } from '../../util/communityUser'
import { virtualDecayTransaction } from '../../util/virtualDecayTransaction'
import Decimal from '../scalar/Decimal'
@Resolver()
export class TransactionResolver {
@ -184,8 +185,11 @@ export class TransactionResolver {
transactionSend.userId = senderUser.id
transactionSend.linkedUserId = recipientUser.id
transactionSend.amount = amount
transactionSend.balance = sendBalance
transactionSend.balance = sendBalance.balance
transactionSend.balanceDate = receivedCallDate
transactionSend.decay = sendBalance.decay.decay
transactionSend.decayStart = sendBalance.decay.start
transactionSend.previous = sendBalance.lastTransactionId
await queryRunner.manager.insert(dbTransaction, transactionSend)
const transactionReceive = new dbTransaction()
@ -198,8 +202,11 @@ export class TransactionResolver {
if (!receiveBalance) {
throw new Error('Sender user account corrupted')
}
transactionReceive.balance = receiveBalance
transactionReceive.balance = receiveBalance.balance
transactionReceive.balanceDate = receivedCallDate
transactionReceive.decay = receiveBalance.decay.decay
transactionReceive.decayStart = receiveBalance.decay.start
transactionReceive.previous = receiveBalance.lastTransactionId
transactionReceive.linkedTransactionId = transactionSend.id
await queryRunner.manager.insert(dbTransaction, transactionReceive)
@ -214,6 +221,7 @@ export class TransactionResolver {
} finally {
await queryRunner.release()
}
// send notification email
// TODO: translate
await sendTransactionReceivedEmail({

View File

@ -28,7 +28,7 @@ function calculateDecay(
// Initialize with no decay
const decay: Decay = {
balance: amount,
decay: null,
decay: new Decimal(0),
start: null,
end: null,
duration: null,

View File

@ -1,6 +1,7 @@
import { calculateDecay } from './decay'
import Decimal from 'decimal.js-light'
import { Transaction } from '@entity/Transaction'
import { Decay } from '../graphql/model/Decay'
function isStringBoolean(value: string): boolean {
const lowerValue = value.toLowerCase()
@ -18,18 +19,17 @@ async function calculateBalance(
userId: number,
amount: Decimal,
time: Date,
): Promise<Decimal | null> {
if (amount.lessThan(0)) return null
): Promise<{ balance: Decimal; decay: Decay; lastTransactionId: number } | null> {
const lastTransaction = await Transaction.findOne({ userId }, { order: { balanceDate: 'DESC' } })
if (!lastTransaction) return null
const accountBalance = calculateDecay(
lastTransaction.balance,
lastTransaction.balanceDate,
time,
).balance.add(amount)
return accountBalance.greaterThan(0) ? accountBalance : null
const decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, time)
// TODO why we have to use toString() here?
const balance = decay.balance.add(amount.toString())
if (balance.lessThan(0)) {
return null
}
return { balance, lastTransactionId: lastTransaction.id, decay }
}
export { isHexPublicKey, calculateBalance, isStringBoolean }

View File

@ -57,7 +57,7 @@ export const createUser = gql`
`
export const sendCoins = gql`
mutation($email: String!, $amount: Float!, $memo: String!) {
mutation($email: String!, $amount: Decimal!, $memo: String!) {
sendCoins(email: $email, amount: $amount, memo: $memo)
}
`