no homeComUuid for local users in transactions

This commit is contained in:
Claus-Peter Huebner 2023-09-19 23:09:46 +02:00
parent d53073783c
commit dcc221fb05
6 changed files with 15 additions and 30 deletions

View File

@ -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

View File

@ -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<boolean> {
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(

View File

@ -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<boolean> => {
// 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
}

View File

@ -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)

View File

@ -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',

View File

@ -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<Array<any>>) {