mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
fixed sendcoins
This commit is contained in:
parent
c60518d39d
commit
5f0cb6dbfe
@ -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
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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 }
|
||||
|
||||
@ -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)
|
||||
}
|
||||
`
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user