From dcc221fb0515f0fa8970a93a2544ee6fbc4c858b Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Tue, 19 Sep 2023 23:09:46 +0200 Subject: [PATCH] no homeComUuid for local users in transactions --- .../graphql/resolver/ContributionResolver.ts | 5 ----- .../resolver/TransactionLinkResolver.ts | 6 +++--- .../graphql/resolver/TransactionResolver.ts | 20 ++----------------- backend/src/util/virtualTransactions.ts | 4 ++-- .../Transaction.ts | 4 ++-- ...add_communityuuid_to_transactions_table.ts | 6 ++++++ 6 files changed, 15 insertions(+), 30 deletions(-) diff --git a/backend/src/graphql/resolver/ContributionResolver.ts b/backend/src/graphql/resolver/ContributionResolver.ts index af313a9a7..1ffa53b27 100644 --- a/backend/src/graphql/resolver/ContributionResolver.ts +++ b/backend/src/graphql/resolver/ContributionResolver.ts @@ -1,5 +1,4 @@ import { IsNull, getConnection } from '@dbTools/typeorm' -import { Community as DbCommunity } from '@entity/Community' import { Contribution as DbContribution } from '@entity/Contribution' import { ContributionMessage } from '@entity/ContributionMessage' import { Transaction as DbTransaction } from '@entity/Transaction' @@ -448,7 +447,6 @@ export class ContributionResolver { if (user.deletedAt) { throw new LogError('Can not confirm contribution since the user was deleted') } - const homeCom = await DbCommunity.findOneOrFail({ where: { foreign: false } }) const creations = await getUserCreation(contribution.userId, clientTimezoneOffset, false) validateContribution( creations, @@ -482,9 +480,6 @@ export class ContributionResolver { transaction.typeId = TransactionTypeId.CREATION transaction.memo = contribution.memo transaction.userId = contribution.userId - if (homeCom.communityUuid) { - transaction.userCommunityUuid = homeCom.communityUuid - } transaction.userGradidoID = user.gradidoID transaction.userName = fullName(user.firstName, user.lastName) transaction.previous = lastTransaction ? lastTransaction.id : null diff --git a/backend/src/graphql/resolver/TransactionLinkResolver.ts b/backend/src/graphql/resolver/TransactionLinkResolver.ts index 667e168b5..63134a9a8 100644 --- a/backend/src/graphql/resolver/TransactionLinkResolver.ts +++ b/backend/src/graphql/resolver/TransactionLinkResolver.ts @@ -1,7 +1,6 @@ import { randomBytes } from 'crypto' import { getConnection } from '@dbTools/typeorm' -import { Community as DbCommunity } from '@entity/Community' import { Contribution as DbContribution } from '@entity/Contribution' import { ContributionLink as DbContributionLink } from '@entity/ContributionLink' import { Transaction as DbTransaction } from '@entity/Transaction' @@ -166,7 +165,7 @@ export class TransactionLinkResolver { @Ctx() context: Context, ): Promise { const clientTimezoneOffset = getClientTimezoneOffset(context) - const homeCom = await DbCommunity.findOneOrFail({ where: { foreign: false } }) + // const homeCom = await DbCommunity.findOneOrFail({ where: { foreign: false } }) const user = getUser(context) if (code.match(/^CL-/)) { @@ -273,9 +272,11 @@ export class TransactionLinkResolver { transaction.typeId = TransactionTypeId.CREATION transaction.memo = contribution.memo transaction.userId = contribution.userId + /* local transaction will not carry homeComUuid for local users if (homeCom.communityUuid) { transaction.userCommunityUuid = homeCom.communityUuid } + */ transaction.userGradidoID = user.gradidoID transaction.userName = fullName(user.firstName, user.lastName) transaction.previous = lastTransaction ? lastTransaction.id : null @@ -348,7 +349,6 @@ export class TransactionLinkResolver { transactionLink.memo, linkedUser, user, - homeCom, transactionLink, ) await EVENT_TRANSACTION_LINK_REDEEM( diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 7560ba306..f368abca3 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -3,7 +3,6 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { getConnection, In, IsNull } from '@dbTools/typeorm' -import { Community as dbCommunity } from '@entity/Community' import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction' import { Transaction as dbTransaction } from '@entity/Transaction' import { TransactionLink as dbTransactionLink } from '@entity/TransactionLink' @@ -47,13 +46,12 @@ export const executeTransaction = async ( memo: string, sender: dbUser, recipient: dbUser, - homeCom: dbCommunity, transactionLink?: dbTransactionLink | null, ): Promise => { // acquire lock const releaseLock = await TRANSACTIONS_LOCK.acquire() try { - logger.info('executeTransaction', amount, memo, homeCom, sender, recipient) + logger.info('executeTransaction', amount, memo, sender, recipient) const openSenderPendingTx = await DbPendingTransaction.count({ where: [ @@ -98,15 +96,9 @@ export const executeTransaction = async ( transactionSend.typeId = TransactionTypeId.SEND transactionSend.memo = memo transactionSend.userId = sender.id - if (homeCom.communityUuid) { - transactionSend.userCommunityUuid = homeCom.communityUuid - } transactionSend.userGradidoID = sender.gradidoID transactionSend.userName = fullName(sender.firstName, sender.lastName) transactionSend.linkedUserId = recipient.id - if (homeCom.communityUuid) { - transactionSend.linkedUserCommunityUuid = homeCom.communityUuid - } transactionSend.linkedUserGradidoID = recipient.gradidoID transactionSend.linkedUserName = fullName(recipient.firstName, recipient.lastName) transactionSend.amount = amount.mul(-1) @@ -124,15 +116,9 @@ export const executeTransaction = async ( transactionReceive.typeId = TransactionTypeId.RECEIVE transactionReceive.memo = memo transactionReceive.userId = recipient.id - if (homeCom.communityUuid) { - transactionReceive.userCommunityUuid = homeCom.communityUuid - } transactionReceive.userGradidoID = recipient.gradidoID transactionReceive.userName = fullName(recipient.firstName, recipient.lastName) transactionReceive.linkedUserId = sender.id - if (homeCom.communityUuid) { - transactionReceive.linkedUserCommunityUuid = homeCom.communityUuid - } transactionReceive.linkedUserGradidoID = sender.gradidoID transactionReceive.linkedUserName = fullName(sender.firstName, sender.lastName) transactionReceive.amount = amount @@ -368,8 +354,6 @@ export class TransactionResolver { logger.info( `sendCoins(recipientCommunityIdentifier=${recipientCommunityIdentifier}, recipientIdentifier=${recipientIdentifier}, amount=${amount}, memo=${memo})`, ) - const homeCom = await dbCommunity.findOneOrFail({ where: { foreign: false } }) - const senderUser = getUser(context) // validate recipient user @@ -378,7 +362,7 @@ export class TransactionResolver { throw new LogError('The recipient user was not found', recipientUser) } - await executeTransaction(amount, memo, senderUser, recipientUser, homeCom) + await executeTransaction(amount, memo, senderUser, recipientUser) logger.info('successful executeTransaction', amount, memo, senderUser, recipientUser) return true } diff --git a/backend/src/util/virtualTransactions.ts b/backend/src/util/virtualTransactions.ts index 74a065d55..063f926e0 100644 --- a/backend/src/util/virtualTransactions.ts +++ b/backend/src/util/virtualTransactions.ts @@ -58,7 +58,7 @@ const virtualLinkTransaction = ( userName: null, linkedUserGradidoID: null, linkedUserName: null, - userCommunityUuid: '', + userCommunityUuid: null, linkedUserCommunityUuid: null, } return new Transaction(linkDbTransaction, user) @@ -94,7 +94,7 @@ const virtualDecayTransaction = ( userName: null, linkedUserGradidoID: null, linkedUserName: null, - userCommunityUuid: '', + userCommunityUuid: null, linkedUserCommunityUuid: null, } return new Transaction(decayDbTransaction, user) diff --git a/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts b/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts index 3efa78ada..8f13de58a 100644 --- a/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts +++ b/database/entity/0072-add_communityuuid_to_transactions_table/Transaction.ts @@ -81,10 +81,10 @@ export class Transaction extends BaseEntity { name: 'user_community_uuid', type: 'varchar', length: 36, - nullable: false, + nullable: true, collation: 'utf8mb4_unicode_ci', }) - userCommunityUuid: string + userCommunityUuid: string | null @Column({ name: 'user_gradido_id', diff --git a/database/migrations/0072-add_communityuuid_to_transactions_table.ts b/database/migrations/0072-add_communityuuid_to_transactions_table.ts index 04685141f..22e7c36eb 100644 --- a/database/migrations/0072-add_communityuuid_to_transactions_table.ts +++ b/database/migrations/0072-add_communityuuid_to_transactions_table.ts @@ -10,6 +10,10 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis await queryFn( 'ALTER TABLE `transactions` ADD COLUMN `linked_user_community_uuid` char(36) DEFAULT NULL NULL AFTER `linked_user_id`;', ) + /* the migration of the HomeCom-UUID for local users in the transactions table will be skipped + and be solved with the future users table migration for treating home- and foreign-users including + homeCom- and foreignCom-UUIDs + // read the community uuid of the homeCommunity const result = await queryFn(`SELECT c.community_uuid from communities as c WHERE c.foreign = 0`) // and if uuid exists enter the home_community_uuid for sender and recipient of each still existing transaction @@ -21,9 +25,11 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis `UPDATE transactions as t SET t.linked_user_community_uuid = "${result[0].community_uuid}" WHERE t.linked_user_id IS NOT NULL AND t.linked_user_community_uuid IS NULL`, ) } + // leads to an error in case of empty communties table during CD/CI-pipeline-tests await queryFn( 'ALTER TABLE `transactions` MODIFY COLUMN `user_community_uuid` char(36) NOT NULL AFTER `user_id`;', ) + */ } export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) {