mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
store foreign user after x-com-tx
This commit is contained in:
parent
235773c9b9
commit
6582cbcb39
@ -47,6 +47,7 @@ import {
|
||||
processXComPendingSendCoins,
|
||||
} from './util/processXComSendCoins'
|
||||
import { sendTransactionsToDltConnector } from './util/sendTransactionsToDltConnector'
|
||||
import { storeForeignUser } from './util/storeForeignUser'
|
||||
import { transactionLinkSummary } from './util/transactionLinkSummary'
|
||||
|
||||
export const executeTransaction = async (
|
||||
@ -404,6 +405,7 @@ export class TransactionResolver {
|
||||
} else {
|
||||
// processing a x-community sendCoins
|
||||
logger.debug('X-Com: processing a x-community transaction...')
|
||||
console.log('X-Com: processing a x-community transaction...')
|
||||
if (!CONFIG.FEDERATION_XCOM_SENDCOINS_ENABLED) {
|
||||
throw new LogError('X-Community sendCoins disabled per configuration!')
|
||||
}
|
||||
@ -414,6 +416,7 @@ export class TransactionResolver {
|
||||
where: { communityUuid: recipientCommunityIdentifier },
|
||||
})
|
||||
logger.debug('recipient commuity: ', recipCom)
|
||||
console.log('recipient commuity: ', recipCom)
|
||||
let pendingResult: SendCoinsResult
|
||||
let committingResult: SendCoinsResult
|
||||
const creationDate = new Date()
|
||||
@ -429,8 +432,10 @@ export class TransactionResolver {
|
||||
recipientIdentifier,
|
||||
)
|
||||
logger.debug('processXComPendingSendCoins result: ', pendingResult)
|
||||
console.log('processXComPendingSendCoins result: ', pendingResult)
|
||||
if (pendingResult.vote && pendingResult.recipGradidoID) {
|
||||
logger.debug('vor processXComCommittingSendCoins... ')
|
||||
console.log('vor processXComCommittingSendCoins... ')
|
||||
committingResult = await processXComCommittingSendCoins(
|
||||
recipCom,
|
||||
homeCom,
|
||||
@ -441,6 +446,7 @@ export class TransactionResolver {
|
||||
pendingResult.recipGradidoID,
|
||||
)
|
||||
logger.debug('processXComCommittingSendCoins result: ', committingResult)
|
||||
console.log('processXComCommittingSendCoins result: ', committingResult)
|
||||
if (!committingResult.vote) {
|
||||
logger.fatal('FATAL ERROR: on processXComCommittingSendCoins for', committingResult)
|
||||
throw new LogError(
|
||||
@ -451,6 +457,21 @@ export class TransactionResolver {
|
||||
memo,
|
||||
)
|
||||
}
|
||||
// after successful x-com-tx store the recipient as foreign user
|
||||
logger.debug('store recipient as foreign user...')
|
||||
console.log('store recipient as foreign user...')
|
||||
if (await storeForeignUser(recipCom, committingResult)) {
|
||||
logger.info(
|
||||
'X-Com: new foreign user inserted successfully...',
|
||||
recipCom.communityUuid,
|
||||
committingResult.recipGradidoID,
|
||||
)
|
||||
console.log(
|
||||
'X-Com: new foreign user inserted successfully...',
|
||||
recipCom.communityUuid,
|
||||
committingResult.recipGradidoID,
|
||||
)
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
throw new LogError(
|
||||
|
||||
@ -171,6 +171,8 @@ describe('UserResolver', () => {
|
||||
referrerId: null,
|
||||
contributionLinkId: null,
|
||||
passwordEncryptionType: PasswordEncryptionType.NO_PASSWORD,
|
||||
communityUuid: null,
|
||||
foreign: false,
|
||||
},
|
||||
])
|
||||
const valUUID = validateUUID(user[0].gradidoID)
|
||||
|
||||
77
backend/src/graphql/resolver/util/storeForeignUser.ts
Normal file
77
backend/src/graphql/resolver/util/storeForeignUser.ts
Normal file
@ -0,0 +1,77 @@
|
||||
import { Community as DbCommunity } from '@entity/Community'
|
||||
import { User as DbUser } from '@entity/User'
|
||||
|
||||
import { SendCoinsResult } from '@/federation/client/1_0/model/SendCoinsResult'
|
||||
import { backendLogger as logger } from '@/server/logger'
|
||||
|
||||
export async function storeForeignUser(
|
||||
recipCom: DbCommunity,
|
||||
committingResult: SendCoinsResult,
|
||||
): Promise<boolean> {
|
||||
if (recipCom.communityUuid !== null && committingResult.recipGradidoID !== null) {
|
||||
try {
|
||||
const user = await DbUser.findOne({
|
||||
where: {
|
||||
foreign: true,
|
||||
communityUuid: recipCom.communityUuid,
|
||||
gradidoID: committingResult.recipGradidoID,
|
||||
},
|
||||
})
|
||||
if (!user) {
|
||||
logger.debug(
|
||||
'X-Com: no foreignUser found for:',
|
||||
recipCom.communityUuid,
|
||||
committingResult.recipGradidoID,
|
||||
)
|
||||
console.log(
|
||||
'X-Com: no foreignUser found for:',
|
||||
recipCom.communityUuid,
|
||||
committingResult.recipGradidoID,
|
||||
)
|
||||
let foreignUser = DbUser.create()
|
||||
foreignUser.foreign = true
|
||||
if (committingResult.recipAlias !== null) {
|
||||
foreignUser.alias = committingResult.recipAlias
|
||||
}
|
||||
foreignUser.communityUuid = recipCom.communityUuid
|
||||
if (committingResult.recipFirstName !== null) {
|
||||
foreignUser.firstName = committingResult.recipFirstName
|
||||
}
|
||||
if (committingResult.recipLastName !== null) {
|
||||
foreignUser.lastName = committingResult.recipLastName
|
||||
}
|
||||
foreignUser.gradidoID = committingResult.recipGradidoID
|
||||
foreignUser = await DbUser.save(foreignUser)
|
||||
logger.debug('X-Com: new foreignUser inserted:', foreignUser)
|
||||
console.log('X-Com: new foreignUser inserted:', foreignUser)
|
||||
|
||||
return true
|
||||
} else if (
|
||||
user.firstName !== committingResult.recipFirstName ||
|
||||
user.lastName !== committingResult.recipLastName ||
|
||||
user.alias !== committingResult.recipAlias
|
||||
) {
|
||||
logger.warn(
|
||||
'X-Com: foreignUser still exists, but with different name or alias:',
|
||||
user,
|
||||
committingResult,
|
||||
)
|
||||
console.log(
|
||||
'X-Com: foreignUser still exists, but with different name or alias:',
|
||||
user,
|
||||
committingResult,
|
||||
)
|
||||
return false
|
||||
} else {
|
||||
logger.debug('X-Com: foreignUser still exists...:', user)
|
||||
console.log('X-Com: foreignUser still exists...:', user)
|
||||
return true
|
||||
}
|
||||
} catch (err) {
|
||||
logger.error('X-Com: error in storeForeignUser;', err)
|
||||
console.log('X-Com: error in storeForeignUser;', err)
|
||||
return false
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
@ -49,7 +49,7 @@ const communityDbUser: dbUser = {
|
||||
throw new Error('Function not implemented.')
|
||||
},
|
||||
foreign: false,
|
||||
communityUuid: null,
|
||||
communityUuid: '55555555-4444-4333-2222-11111111',
|
||||
}
|
||||
const communityUser = new User(communityDbUser)
|
||||
|
||||
|
||||
@ -8,7 +8,6 @@ import {
|
||||
JoinColumn,
|
||||
OneToOne,
|
||||
} from 'typeorm'
|
||||
import { Community } from '../Community'
|
||||
import { Contribution } from '../Contribution'
|
||||
import { ContributionMessage } from '../ContributionMessage'
|
||||
import { UserContact } from '../UserContact'
|
||||
@ -37,7 +36,7 @@ export class User extends BaseEntity {
|
||||
nullable: true,
|
||||
collation: 'utf8mb4_unicode_ci',
|
||||
})
|
||||
communityUuid: string | null
|
||||
communityUuid: string
|
||||
|
||||
@Column({
|
||||
name: 'alias',
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
|
||||
export async function upgrade(queryFn: (query: string, values?: any[]) => Promise<Array<any>>) {
|
||||
await queryFn('ALTER TABLE `users` DROP KEY IF EXISTS `gradido_id`;')
|
||||
await queryFn('ALTER TABLE `users` DROP INDEX IF EXISTS `gradido_id`;')
|
||||
await queryFn('ALTER TABLE `users` DROP KEY IF EXISTS `alias`;')
|
||||
await queryFn('ALTER TABLE `users` DROP INDEX IF EXISTS `alias`;')
|
||||
await queryFn(
|
||||
'ALTER TABLE `users` ADD COLUMN IF NOT EXISTS `foreign` tinyint(4) NOT NULL DEFAULT 0 AFTER `id`;',
|
||||
)
|
||||
@ -12,10 +16,18 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis
|
||||
await queryFn(
|
||||
'ALTER TABLE `users` ADD CONSTRAINT uuid_key UNIQUE KEY (`gradido_id`, `community_uuid`);',
|
||||
)
|
||||
await queryFn(
|
||||
'ALTER TABLE `users` ADD CONSTRAINT alias_key UNIQUE KEY (`alias`, `community_uuid`);',
|
||||
)
|
||||
}
|
||||
|
||||
export async function downgrade(queryFn: (query: string, values?: any[]) => Promise<Array<any>>) {
|
||||
await queryFn('ALTER TABLE `users` DROP CONSTRAINT IF EXISTS `uuid_key`;')
|
||||
await queryFn('ALTER TABLE `users` DROP KEY IF EXISTS `uuid_key`;')
|
||||
await queryFn('ALTER TABLE `users` DROP KEY IF EXISTS `alias_key`;')
|
||||
|
||||
await queryFn('ALTER TABLE `users` DROP COLUMN IF EXISTS `foreign`;')
|
||||
await queryFn('ALTER TABLE `users` DROP COLUMN IF EXISTS `community_uuid`;')
|
||||
|
||||
await queryFn('ALTER TABLE `users` ADD CONSTRAINT gradido_id UNIQUE KEY (`gradido_id`);')
|
||||
await queryFn('ALTER TABLE `users` ADD CONSTRAINT alias UNIQUE KEY (`alias`);')
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user