diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 7430868b1..11d7f201c 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -15,7 +15,6 @@ import UpdatePendingCreationArgs from '../arg/UpdatePendingCreationArgs' import SearchUsersArgs from '../arg/SearchUsersArgs' import moment from 'moment' import { Transaction } from '@entity/Transaction' -import { TransactionCreation } from '@entity/TransactionCreation' import { UserTransaction } from '@entity/UserTransaction' import { UserTransactionRepository } from '../../typeorm/repository/UserTransaction' import { BalanceRepository } from '../../typeorm/repository/Balance' @@ -24,6 +23,7 @@ import { AdminPendingCreation } from '@entity/AdminPendingCreation' import { hasElopageBuys } from '../../util/hasElopageBuys' import { LoginEmailOptIn } from '@entity/LoginEmailOptIn' import { User } from '@entity/User' +import { TransactionTypeId } from '../enum/TransactionTypeId' // const EMAIL_OPT_IN_REGISTER = 1 // const EMAIL_OPT_UNKNOWN = 3 // elopage? @@ -229,17 +229,12 @@ export class AdminResolver { transaction.transactionTypeId = 1 transaction.memo = pendingCreation.memo transaction.received = receivedCallDate + transaction.userId = pendingCreation.userId + transaction.amount = BigInt(parseInt(pendingCreation.amount.toString())) + transaction.creationDate = pendingCreation.date transaction = await transactionRepository.save(transaction) if (!transaction) throw new Error('Could not create transaction') - let transactionCreation = new TransactionCreation() - transactionCreation.transactionId = transaction.id - transactionCreation.userId = pendingCreation.userId - transactionCreation.amount = parseInt(pendingCreation.amount.toString()) - transactionCreation.targetDate = pendingCreation.date - transactionCreation = await TransactionCreation.save(transactionCreation) - if (!transactionCreation) throw new Error('Could not create transactionCreation') - const userTransactionRepository = getCustomRepository(UserTransactionRepository) const lastUserTransaction = await userTransactionRepository.findLastForUser( pendingCreation.userId, @@ -289,10 +284,11 @@ async function getUserCreations(id: number): Promise { const lastMonthNumber = moment().subtract(1, 'month').format('M') const currentMonthNumber = moment().format('M') - const createdAmountsQuery = await TransactionCreation.createQueryBuilder('transaction_creations') - .select('MONTH(transaction_creations.target_date)', 'target_month') - .addSelect('SUM(transaction_creations.amount)', 'sum') - .where('transaction_creations.state_user_id = :id', { id }) + const createdAmountsQuery = await Transaction.createQueryBuilder('transactions') + .select('MONTH(transactions.creation_date)', 'target_month') + .addSelect('SUM(transactions.amount)', 'sum') + .where('transactions.user_id = :id', { id }) + .andWhere('transactions.transaction_type_id = :type', { type: TransactionTypeId.CREATION }) .andWhere({ targetDate: Raw((alias) => `${alias} >= :date and ${alias} < :endDate`, { date: dateBeforeLastMonth, diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 8d9e0c6c3..9c7c8b93f 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -24,7 +24,6 @@ import { TransactionRepository } from '../../typeorm/repository/Transaction' import { User as dbUser } from '@entity/User' import { UserTransaction as dbUserTransaction } from '@entity/UserTransaction' import { Transaction as dbTransaction } from '@entity/Transaction' -import { TransactionSendCoin as dbTransactionSendCoin } from '@entity/TransactionSendCoin' import { Balance as dbBalance } from '@entity/Balance' import { apiPost } from '../../apis/HttpRequest' @@ -57,8 +56,8 @@ async function calculateAndAddDecayTransactions( transactions.forEach((transaction: dbTransaction) => { transactionIndiced[transaction.id] = transaction if (transaction.transactionTypeId === TransactionTypeId.SEND) { - involvedUserIds.push(transaction.transactionSendCoin.userId) - involvedUserIds.push(transaction.transactionSendCoin.recipiantUserId) + involvedUserIds.push(transaction.userId) + involvedUserIds.push(transaction.sendReceiverUserId!) // TODO ensure not null properly } }) // remove duplicates @@ -108,24 +107,21 @@ async function calculateAndAddDecayTransactions( // balance if (userTransaction.transactionTypeId === TransactionTypeId.CREATION) { // creation - const creation = transaction.transactionCreation - finalTransaction.name = 'Gradido Akademie' finalTransaction.type = TransactionType.CREATION // finalTransaction.targetDate = creation.targetDate - finalTransaction.balance = roundFloorFrom4(creation.amount) + finalTransaction.balance = roundFloorFrom4(Number(transaction.amount)) // Todo unsafe conversion } else if (userTransaction.transactionTypeId === TransactionTypeId.SEND) { // send coin - const sendCoin = transaction.transactionSendCoin let otherUser: dbUser | undefined - finalTransaction.balance = roundFloorFrom4(sendCoin.amount) - if (sendCoin.userId === user.id) { + finalTransaction.balance = roundFloorFrom4(Number(transaction.amount)) // Todo unsafe conversion + if (transaction.userId === user.id) { finalTransaction.type = TransactionType.SEND - otherUser = userIndiced[sendCoin.recipiantUserId] + otherUser = userIndiced[transaction.sendReceiverUserId!] // TODO properly enforce null // finalTransaction.pubkey = sendCoin.recipiantPublic - } else if (sendCoin.recipiantUserId === user.id) { + } else if (transaction.sendReceiverUserId === user.id) { finalTransaction.type = TransactionType.RECIEVE - otherUser = userIndiced[sendCoin.userId] + otherUser = userIndiced[transaction.userId] // finalTransaction.pubkey = sendCoin.senderPublic } else { throw new Error('invalid transaction') @@ -373,6 +369,11 @@ export class TransactionResolver { let transaction = new dbTransaction() transaction.transactionTypeId = TransactionTypeId.SEND transaction.memo = memo + transaction.userId = senderUser.id + transaction.pubkey = senderUser.pubKey + transaction.sendReceiverUserId = recipientUser.id + transaction.sendReceiverPublicKey = recipientUser.pubKey + transaction.amount = BigInt(centAmount) // TODO: NO! this is problematic in its construction const insertResult = await queryRunner.manager.insert(dbTransaction, transaction) @@ -421,18 +422,7 @@ export class TransactionResolver { throw new Error('db data corrupted, recipiant') } - // transactionSendCoin - const transactionSendCoin = new dbTransactionSendCoin() - transactionSendCoin.transactionId = transaction.id - transactionSendCoin.userId = senderUser.id - transactionSendCoin.senderPublic = senderUser.pubKey - transactionSendCoin.recipiantUserId = recipientUser.id - transactionSendCoin.recipiantPublic = recipientUser.pubKey - transactionSendCoin.amount = centAmount - transactionSendCoin.senderFinalBalance = senderStateBalance.amount - await queryRunner.manager.save(transactionSendCoin).catch((error) => { - throw new Error('error saving transaction send coin: ' + error) - }) + transaction.sendSenderFinalBalance = BigInt(senderStateBalance.amount) await queryRunner.manager.save(transaction).catch((error) => { throw new Error('error saving transaction with tx hash: ' + error)