Database join contribution to transaction table, add new join to query.

This commit is contained in:
elweyn 2022-12-01 12:07:25 +01:00
parent b05c009d6e
commit 46014adc6d
8 changed files with 131 additions and 5 deletions

View File

@ -42,7 +42,9 @@ export class Transaction {
this.creationDate = transaction.creationDate
this.linkedUser = linkedUser
this.linkedTransactionId = transaction.linkedTransactionId
this.transactionLinkId = transaction.transactionLinkId
this.transactionLinkId = transaction.contribution
? transaction.contribution.contributionLinkId
: transaction.transactionLinkId
}
@Field(() => Number)

View File

@ -278,6 +278,7 @@ export class TransactionLinkResolver {
.createQueryBuilder()
.select('transaction')
.from(DbTransaction, 'transaction')
.innerJoinAndSelect('transaction.contribution', 'c')
.where('transaction.userId = :id', { id: user.id })
.orderBy('transaction.balanceDate', 'DESC')
.getOne()
@ -301,7 +302,7 @@ export class TransactionLinkResolver {
transaction.balanceDate = now
transaction.decay = decay ? decay.decay : new Decimal(0)
transaction.decayStart = decay ? decay.start : null
transaction.transactionLinkId = contributionLink.id
transaction.contribution = contribution
await queryRunner.manager.insert(DbTransaction, transaction)
contribution.confirmedAt = now

View File

@ -215,7 +215,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}`)
@ -238,7 +238,6 @@ export class TransactionResolver {
order,
)
context.transactionCount = userTransactionsCount
// find involved users; I am involved
const involvedUserIds: number[] = [user.id]
userTransactions.forEach((transaction: dbTransaction) => {

View File

@ -1,4 +1,5 @@
import { EntityRepository, Repository } from '@dbTools/typeorm'
import { Contribution } from '@entity/Contribution'
import { Transaction } from '@entity/Transaction'
import { Order } from '@enum/Order'
import { TransactionTypeId } from '@enum/TransactionTypeId'
@ -14,6 +15,11 @@ export class TransactionRepository extends Repository<Transaction> {
): Promise<[Transaction[], number]> {
if (onlyCreation) {
return this.createQueryBuilder('userTransaction')
.innerJoinAndSelect(
'userTransaction.contribution',
'c',
'userTransaction.id = c.transactionId',
)
.where('userTransaction.userId = :userId', { userId })
.andWhere('userTransaction.typeId = :typeId', {
typeId: TransactionTypeId.CREATION,
@ -24,6 +30,11 @@ export class TransactionRepository extends Repository<Transaction> {
.getManyAndCount()
}
return this.createQueryBuilder('userTransaction')
.innerJoinAndSelect(
'userTransaction.contribution',
'c',
'userTransaction.id = c.transactionId',
)
.where('userTransaction.userId = :userId', { userId })
.orderBy('userTransaction.balanceDate', order)
.limit(limit)
@ -33,6 +44,12 @@ export class TransactionRepository extends Repository<Transaction> {
findLastForUser(userId: number): Promise<Transaction | undefined> {
return this.createQueryBuilder('userTransaction')
.innerJoinAndMapOne(
'userTransaction.contribution',
Contribution,
'c',
'userTransaction.id = c.transactionId',
)
.where('userTransaction.userId = :userId', { userId })
.orderBy('userTransaction.balanceDate', 'DESC')
.getOne()

View File

@ -49,6 +49,7 @@ const virtualLinkTransaction = (
decay: decay.toDecimalPlaces(2, Decimal.ROUND_FLOOR),
memo: '',
creationDate: null,
contribution: null,
...defaultModelFunctions,
}
return new Transaction(linkDbTransaction, user)
@ -78,6 +79,7 @@ const virtualDecayTransaction = (
decayStart: decay.start,
memo: '',
creationDate: null,
contribution: null,
...defaultModelFunctions,
}
return new Transaction(decayDbTransaction, user)

View File

@ -8,10 +8,12 @@ import {
JoinColumn,
ManyToOne,
OneToMany,
OneToOne,
} from 'typeorm'
import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer'
import { User } from '../User'
import { ContributionMessage } from '../ContributionMessage'
import { Transaction } from '../Transaction'
@Entity('contributions')
export class Contribution extends BaseEntity {
@ -92,4 +94,8 @@ export class Contribution extends BaseEntity {
@OneToMany(() => ContributionMessage, (message) => message.contribution)
@JoinColumn({ name: 'contribution_id' })
messages?: ContributionMessage[]
@OneToOne(() => Transaction, (transaction) => transaction.contribution)
@JoinColumn({ name: 'transaction_id' })
transaction?: Transaction | null
}

View File

@ -0,0 +1,99 @@
import Decimal from 'decimal.js-light'
import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn } from 'typeorm'
import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer'
import { Contribution } from '../Contribution'
@Entity('transactions')
export class Transaction extends BaseEntity {
@PrimaryGeneratedColumn('increment', { unsigned: true })
id: number
@Column({ name: 'user_id', unsigned: true, nullable: false })
userId: number
@Column({ type: 'int', unsigned: true, unique: true, nullable: true, default: null })
previous: number | null
@Column({ name: 'type_id', unsigned: true, nullable: false })
typeId: number
@Column({
type: 'decimal',
precision: 40,
scale: 20,
nullable: false,
transformer: DecimalTransformer,
})
amount: Decimal
@Column({
type: 'decimal',
precision: 40,
scale: 20,
nullable: false,
transformer: DecimalTransformer,
})
balance: Decimal
@Column({
name: 'balance_date',
type: 'datetime',
default: () => 'CURRENT_TIMESTAMP',
nullable: false,
})
balanceDate: Date
@Column({
type: 'decimal',
precision: 40,
scale: 20,
nullable: false,
transformer: DecimalTransformer,
})
decay: Decimal
@Column({
name: 'decay_start',
type: 'datetime',
nullable: true,
default: null,
})
decayStart: Date | null
@Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' })
memo: string
@Column({ name: 'creation_date', type: 'datetime', nullable: true, default: null })
creationDate: Date | null
@Column({
name: 'linked_user_id',
type: 'int',
unsigned: true,
nullable: true,
default: null,
})
linkedUserId?: number | null
@Column({
name: 'linked_transaction_id',
type: 'int',
unsigned: true,
nullable: true,
default: null,
})
linkedTransactionId?: number | null
@Column({
name: 'transaction_link_id',
type: 'int',
unsigned: true,
nullable: true,
default: null,
})
transactionLinkId?: number | null
@OneToOne(() => Contribution, (contribution) => contribution.transaction)
@JoinColumn({ name: 'id', referencedColumnName: 'transactionId' })
contribution?: Contribution | null
}

View File

@ -1 +1 @@
export { Transaction } from './0036-unique_previous_in_transactions/Transaction'
export { Transaction } from './0052-add_updated_at_to_contributions/Transaction'