mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Correct joins between contribution and transaction
This commit is contained in:
parent
ec396e8521
commit
0b2887b86f
@ -265,6 +265,7 @@ export class TransactionLinkResolver {
|
||||
const creations = await getUserCreation(user.id, clientTimezoneOffset)
|
||||
logger.info('open creations', creations)
|
||||
validateContribution(creations, contributionLink.amount, now, clientTimezoneOffset)
|
||||
|
||||
const contribution = new DbContribution()
|
||||
contribution.userId = user.id
|
||||
contribution.createdAt = now
|
||||
@ -274,19 +275,16 @@ export class TransactionLinkResolver {
|
||||
contribution.contributionLinkId = contributionLink.id
|
||||
contribution.contributionType = ContributionType.LINK
|
||||
contribution.contributionStatus = ContributionStatus.CONFIRMED
|
||||
|
||||
await queryRunner.manager.insert(DbContribution, contribution)
|
||||
|
||||
const lastTransaction = await queryRunner.manager
|
||||
.createQueryBuilder()
|
||||
.select('transaction')
|
||||
.from(DbTransaction, 'transaction')
|
||||
.innerJoinAndSelect('transaction.contribution', 'c')
|
||||
.where('transaction.userId = :id', { id: user.id })
|
||||
.orderBy('transaction.balanceDate', 'DESC')
|
||||
.getOne()
|
||||
let newBalance = new Decimal(0)
|
||||
|
||||
let decay: Decay | null = null
|
||||
if (lastTransaction) {
|
||||
decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, now)
|
||||
@ -305,7 +303,6 @@ export class TransactionLinkResolver {
|
||||
transaction.balanceDate = now
|
||||
transaction.decay = decay ? decay.decay : new Decimal(0)
|
||||
transaction.decayStart = decay ? decay.start : null
|
||||
transaction.contribution = contribution
|
||||
await queryRunner.manager.insert(DbTransaction, transaction)
|
||||
|
||||
contribution.confirmedAt = now
|
||||
|
||||
@ -206,7 +206,7 @@ export class TransactionResolver {
|
||||
// find current balance
|
||||
const lastTransaction = await dbTransaction.findOne(
|
||||
{ userId: user.id },
|
||||
{ order: { balanceDate: 'DESC' } },
|
||||
{ order: { balanceDate: 'DESC' }, relations: ['contribution'] },
|
||||
)
|
||||
logger.debug(`lastTransaction=${lastTransaction}`)
|
||||
|
||||
@ -313,6 +313,10 @@ export class TransactionResolver {
|
||||
@Ctx() context: Context,
|
||||
): Promise<boolean> {
|
||||
logger.info(`sendCoins(email=${email}, amount=${amount}, memo=${memo})`)
|
||||
if (amount.lte(0)) {
|
||||
logger.error(`Amount to send must be positive`)
|
||||
throw new Error('Amount to send must be positive')
|
||||
}
|
||||
|
||||
// TODO this is subject to replay attacks
|
||||
const senderUser = getUser(context)
|
||||
|
||||
@ -15,7 +15,7 @@ export class TransactionRepository extends Repository<Transaction> {
|
||||
): Promise<[Transaction[], number]> {
|
||||
if (onlyCreation) {
|
||||
return this.createQueryBuilder('userTransaction')
|
||||
.innerJoinAndSelect(
|
||||
.leftJoinAndSelect(
|
||||
'userTransaction.contribution',
|
||||
'c',
|
||||
'userTransaction.id = c.transactionId',
|
||||
@ -30,7 +30,7 @@ export class TransactionRepository extends Repository<Transaction> {
|
||||
.getManyAndCount()
|
||||
}
|
||||
return this.createQueryBuilder('userTransaction')
|
||||
.innerJoinAndSelect(
|
||||
.leftJoinAndSelect(
|
||||
'userTransaction.contribution',
|
||||
'c',
|
||||
'userTransaction.id = c.transactionId',
|
||||
@ -44,7 +44,7 @@ export class TransactionRepository extends Repository<Transaction> {
|
||||
|
||||
findLastForUser(userId: number): Promise<Transaction | undefined> {
|
||||
return this.createQueryBuilder('userTransaction')
|
||||
.innerJoinAndMapOne(
|
||||
.leftJoinAndMapOne(
|
||||
'userTransaction.contribution',
|
||||
Contribution,
|
||||
'c',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user