From 642d2202bf80c5386aeef381eb4e5e675dde8dbd Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 26 Jun 2023 17:34:32 +0200 Subject: [PATCH] try to get repository working again --- .../src/graphql/resolver/BalanceResolver.ts | 3 +- .../resolver/TransactionLinkResolver.ts | 8 ++ .../graphql/resolver/TransactionResolver.ts | 3 +- backend/src/seeds/factory/transactionLink.ts | 5 +- backend/src/seeds/index.ts | 1 + backend/src/server/createServer.ts | 1 + .../src/typeorm/repository/TransactionLink.ts | 73 ++++++++++--------- backend/src/util/validate.ts | 5 +- backend/test/helpers.ts | 2 +- 9 files changed, 57 insertions(+), 44 deletions(-) diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 9cd133181..9a11093b8 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -6,7 +6,7 @@ import { Decimal } from 'decimal.js-light' import { Resolver, Query, Ctx, Authorized } from 'type-graphql' import { Balance } from '@model/Balance' -import { TransactionLinkRepository } from '@repository/TransactionLink' +import { transactionLinkRepository } from '@repository/TransactionLink' import { RIGHTS } from '@/auth/RIGHTS' import { Context, getUser } from '@/server/context' @@ -77,7 +77,6 @@ export class BalanceResolver { ) // The final balance is reduced by the link amount withheld - const transactionLinkRepository = getCustomRepository(TransactionLinkRepository) const { sumHoldAvailableAmount } = context.sumHoldAvailableAmount ? { sumHoldAvailableAmount: context.sumHoldAvailableAmount } : await transactionLinkRepository.summary(user.id, now) diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 0ff606fa5..b198a2335 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -76,14 +76,22 @@ export class TransactionLinkResolver { throw new LogError('Amount must be a positive number', amount) } + console.log('Hallo') + const holdAvailableAmount = amount.minus(calculateDecay(amount, createdDate, validUntil).decay) + console.log(holdAvailableAmount) + // validate amount const sendBalance = await calculateBalance(user.id, holdAvailableAmount.mul(-1), createdDate) + console.log('sendBalance', sendBalance) + if (!sendBalance) { throw new LogError('User has not enough GDD', user.id) } + console.log(sendBalance) + const transactionLink = DbTransactionLink.create() transactionLink.userId = user.id transactionLink.amount = amount diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 40e9ec2dd..8a1097b99 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -16,7 +16,7 @@ import { TransactionTypeId } from '@enum/TransactionTypeId' import { Transaction } from '@model/Transaction' import { TransactionList } from '@model/TransactionList' import { User } from '@model/User' -import { TransactionLinkRepository } from '@repository/TransactionLink' +import { transactionLinkRepository } from '@repository/TransactionLink' import { RIGHTS } from '@/auth/RIGHTS' import { @@ -245,7 +245,6 @@ export class TransactionResolver { const self = new User(user) const transactions: Transaction[] = [] - const transactionLinkRepository = getCustomRepository(TransactionLinkRepository) const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, transactionLinkcount } = await transactionLinkRepository.summary(user.id, now) context.linkCount = transactionLinkcount diff --git a/backend/src/seeds/factory/transactionLink.ts b/backend/src/seeds/factory/transactionLink.ts index b44fe349c..8bbdb64c4 100644 --- a/backend/src/seeds/factory/transactionLink.ts +++ b/backend/src/seeds/factory/transactionLink.ts @@ -24,12 +24,15 @@ export const transactionLinkFactory = async ( memo: transactionLink.memo, } + const result = await mutate({ mutation: createTransactionLink, variables }) + console.log(result) + // get the transaction links's id const { data: { createTransactionLink: { id }, }, - } = await mutate({ mutation: createTransactionLink, variables }) + } = result if (transactionLink.createdAt || transactionLink.deletedAt) { const dbTransactionLink = await TransactionLink.findOneOrFail({ where: { id } }) diff --git a/backend/src/seeds/index.ts b/backend/src/seeds/index.ts index bc7950f26..2560aa883 100644 --- a/backend/src/seeds/index.ts +++ b/backend/src/seeds/index.ts @@ -52,6 +52,7 @@ const resetEntity = async (entity: any) => { const run = async () => { const server = await createServer(context) + console.log(server) const seedClient = createTestClient(server.apollo) const { con } = server await cleanDB() diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index c162d9f6f..36a5bd5e0 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -37,6 +37,7 @@ export const createServer = async ( logger.debug('createServer...') // open mysql connection + console.log('Connection.getInstance') const con = await Connection.getInstance() if (!con?.isConnected) { logger.fatal(`Couldn't open connection to database!`) diff --git a/backend/src/typeorm/repository/TransactionLink.ts b/backend/src/typeorm/repository/TransactionLink.ts index 8a66aa7cf..45586c538 100644 --- a/backend/src/typeorm/repository/TransactionLink.ts +++ b/backend/src/typeorm/repository/TransactionLink.ts @@ -1,41 +1,42 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ -import { Repository, EntityRepository } from '@dbTools/typeorm' +import { getConnection } from '@dbTools/typeorm' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' import { Decimal } from 'decimal.js-light' -@EntityRepository(dbTransactionLink) -export class TransactionLinkRepository extends Repository { - async summary( - userId: number, - date: Date, - ): Promise<{ - sumHoldAvailableAmount: Decimal - sumAmount: Decimal - lastDate: Date | null - firstDate: Date | null - transactionLinkcount: number - }> { - const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, count } = - await this.createQueryBuilder('transactionLinks') - .select('SUM(transactionLinks.holdAvailableAmount)', 'sumHoldAvailableAmount') - .addSelect('SUM(transactionLinks.amount)', 'sumAmount') - .addSelect('MAX(transactionLinks.validUntil)', 'lastDate') - .addSelect('MIN(transactionLinks.createdAt)', 'firstDate') - .addSelect('COUNT(*)', 'count') - .where('transactionLinks.userId = :userId', { userId }) - .andWhere('transactionLinks.redeemedAt is NULL') - .andWhere('transactionLinks.validUntil > :date', { date }) - .orderBy('transactionLinks.createdAt', 'DESC') - .getRawOne() - return { - sumHoldAvailableAmount: sumHoldAvailableAmount - ? new Decimal(sumHoldAvailableAmount) - : new Decimal(0), - sumAmount: sumAmount ? new Decimal(sumAmount) : new Decimal(0), - lastDate: lastDate || null, - firstDate: firstDate || null, - transactionLinkcount: count || 0, - } - } -} +export const transactionLinkRepository = getConnection() + .getRepository(dbTransactionLink) + .extend({ + async summary( + userId: number, + date: Date, + ): Promise<{ + sumHoldAvailableAmount: Decimal + sumAmount: Decimal + lastDate: Date | null + firstDate: Date | null + transactionLinkcount: number + }> { + const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, count } = + await this.createQueryBuilder('transactionLinks') + .select('SUM(transactionLinks.holdAvailableAmount)', 'sumHoldAvailableAmount') + .addSelect('SUM(transactionLinks.amount)', 'sumAmount') + .addSelect('MAX(transactionLinks.validUntil)', 'lastDate') + .addSelect('MIN(transactionLinks.createdAt)', 'firstDate') + .addSelect('COUNT(*)', 'count') + .where('transactionLinks.userId = :userId', { userId }) + .andWhere('transactionLinks.redeemedAt is NULL') + .andWhere('transactionLinks.validUntil > :date', { date }) + .orderBy('transactionLinks.createdAt', 'DESC') + .getRawOne() + return { + sumHoldAvailableAmount: sumHoldAvailableAmount + ? new Decimal(sumHoldAvailableAmount) + : new Decimal(0), + sumAmount: sumAmount ? new Decimal(sumAmount) : new Decimal(0), + lastDate: lastDate || null, + firstDate: firstDate || null, + transactionLinkcount: count || 0, + } + }, + }) diff --git a/backend/src/util/validate.ts b/backend/src/util/validate.ts index 22a6ee5db..8c84b06b2 100644 --- a/backend/src/util/validate.ts +++ b/backend/src/util/validate.ts @@ -3,7 +3,7 @@ import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' import { Decimal } from 'decimal.js-light' import { Decay } from '@model/Decay' -import { TransactionLinkRepository } from '@repository/TransactionLink' +import { transactionLinkRepository } from '@repository/TransactionLink' import { getLastTransaction } from '@/graphql/resolver/util/getLastTransaction' @@ -26,10 +26,11 @@ async function calculateBalance( const lastTransaction = await getLastTransaction(userId) if (!lastTransaction) return null + console.log(lastTransaction) + const decay = calculateDecay(lastTransaction.balance, lastTransaction.balanceDate, time) const balance = decay.balance.add(amount.toString()) - const transactionLinkRepository = getCustomRepository(TransactionLinkRepository) const { sumHoldAvailableAmount } = await transactionLinkRepository.summary(userId, time) // If we want to redeem a link we need to make sure that the link amount is not considered as blocked diff --git a/backend/test/helpers.ts b/backend/test/helpers.ts index ec9c14795..8a541e3e4 100644 --- a/backend/test/helpers.ts +++ b/backend/test/helpers.ts @@ -41,7 +41,7 @@ export const testEnvironment = async (testLogger = logger, testI18n = i18n) => { return { mutate, query, con } } -export const resetEntity = async (entity: anny) => { +export const resetEntity = async (entity: any) => { const items = await entity.find({ withDeleted: true }) if (items.length > 0) { const ids = items.map((e: any) => e.id)