From d64603268efa24d0ef395cee0369f3d45865659b Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Tue, 10 Oct 2023 23:52:11 +0200 Subject: [PATCH] show alias or username plus foreign-communityName in Tx-Lists --- backend/src/graphql/arg/UserArgs.ts | 13 +++++++++ backend/src/graphql/model/User.ts | 3 +++ .../graphql/resolver/TransactionResolver.ts | 27 +++++++++---------- backend/src/graphql/resolver/UserResolver.ts | 15 ++++++++--- .../src/graphql/resolver/util/communities.ts | 6 +++++ backend/src/seeds/graphql/queries.ts | 2 +- .../src/components/TransactionRows/Name.vue | 13 +++++++-- frontend/src/graphql/queries.js | 4 +++ 8 files changed, 63 insertions(+), 20 deletions(-) create mode 100644 backend/src/graphql/arg/UserArgs.ts diff --git a/backend/src/graphql/arg/UserArgs.ts b/backend/src/graphql/arg/UserArgs.ts new file mode 100644 index 000000000..633ed5e20 --- /dev/null +++ b/backend/src/graphql/arg/UserArgs.ts @@ -0,0 +1,13 @@ +import { IsString } from 'class-validator' +import { ArgsType, Field } from 'type-graphql' + +@ArgsType() +export class UserArgs { + @Field({ nullable: false }) + @IsString() + identifier: string + + @Field({ nullable: true }) + @IsString() + communityIdentifier?: string +} diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 20a41dd26..cd188f49f 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -38,6 +38,9 @@ export class User { @Field(() => String) communityUuid: string + @Field(() => String, { nullable: true }) + communityName: string | null + @Field(() => String) gradidoID: string diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index a9ac7c79c..1c8761e7f 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -38,7 +38,7 @@ import { calculateBalance } from '@/util/validate' import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions' import { BalanceResolver } from './BalanceResolver' -import { isCommunityAuthenticated, isHomeCommunity } from './util/communities' +import { getCommunityName, isCommunityAuthenticated, isHomeCommunity } from './util/communities' import { findUserByIdentifier } from './util/findUserByIdentifier' import { getLastTransaction } from './util/getLastTransaction' import { getTransactionList } from './util/getTransactionList' @@ -275,13 +275,23 @@ export class TransactionResolver { logger.debug('found dbRemoteUser:', dbRemoteUser) const remoteUser = new User(dbRemoteUser) if (dbRemoteUser === null) { + logger.debug('no dbRemoteUser found, init from tx:', transaction) if (transaction.linkedUserCommunityUuid !== null) { remoteUser.communityUuid = transaction.linkedUserCommunityUuid } remoteUser.gradidoID = transaction.linkedUserGradidoID - remoteUser.firstName = transaction.linkedUserName - remoteUser.lastName = 'GradidoID: ' + transaction.linkedUserGradidoID + if (transaction.linkedUserName) { + remoteUser.firstName = transaction.linkedUserName.slice( + 0, + transaction.linkedUserName.indexOf(' '), + ) + remoteUser.lastName = transaction.linkedUserName?.slice( + transaction.linkedUserName.indexOf(' '), + transaction.linkedUserName.length, + ) + } } + remoteUser.communityName = await getCommunityName(remoteUser.communityUuid) involvedRemoteUsers.push(remoteUser) } } @@ -427,7 +437,6 @@ 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!') } @@ -438,7 +447,6 @@ 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() @@ -454,10 +462,8 @@ 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, @@ -468,7 +474,6 @@ 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( @@ -481,18 +486,12 @@ export class TransactionResolver { } // 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) { diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 7b5bcdd91..665340e63 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -12,6 +12,7 @@ import i18n from 'i18n' import { Resolver, Query, Args, Arg, Authorized, Ctx, Mutation, Int } from 'type-graphql' import { v4 as uuidv4 } from 'uuid' +import { UserArgs } from '@arg//UserArgs' import { CreateUserArgs } from '@arg/CreateUserArgs' import { Paginated } from '@arg/Paginated' import { SearchUsersFilters } from '@arg/SearchUsersFilters' @@ -64,6 +65,7 @@ import random from 'random-bigint' import { randombytes_random } from 'sodium-native' import { FULL_CREATION_AVAILABLE } from './const/const' +import { getCommunityName, getHomeCommunity } from './util/communities' import { getUserCreations } from './util/creations' import { findUserByIdentifier } from './util/findUserByIdentifier' import { findUsers } from './util/findUsers' @@ -810,10 +812,17 @@ export class UserResolver { @Authorized([RIGHTS.USER]) @Query(() => User) async user( - @Arg('identifier') identifier: string, - @Arg('communityIdentifier') communityIdentifier?: string, + @Args() + { identifier, communityIdentifier }: UserArgs, ): Promise { - return new User(await findUserByIdentifier(identifier, communityIdentifier)) + const foundDbUser = await findUserByIdentifier(identifier, communityIdentifier) + const modelUser = new User(foundDbUser) + if (!foundDbUser.communityUuid) { + modelUser.communityName = (await Promise.resolve(getHomeCommunity())).name + } else { + modelUser.communityName = await getCommunityName(foundDbUser.communityUuid) + } + return modelUser } } diff --git a/backend/src/graphql/resolver/util/communities.ts b/backend/src/graphql/resolver/util/communities.ts index 52fee86b2..29a55fca3 100644 --- a/backend/src/graphql/resolver/util/communities.ts +++ b/backend/src/graphql/resolver/util/communities.ts @@ -15,6 +15,12 @@ export async function isHomeCommunity(communityIdentifier: string): Promise { + return await DbCommunity.findOneOrFail({ + where: [{ foreign: true }], + }) +} + export async function getCommunityUrl(communityIdentifier: string): Promise { const community = await DbCommunity.findOneOrFail({ where: [ diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index bb665c4c7..27d5b5d1e 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -370,7 +370,7 @@ export const adminListContributionMessages = gql` ` export const user = gql` - query ($identifier: String!, $communityIdentifier?: String) { + query ($identifier: String!, $communityIdentifier: String) { user(identifier: $identifier, $communityIdentifier: $communityIdentifier) { firstName lastName diff --git a/frontend/src/components/TransactionRows/Name.vue b/frontend/src/components/TransactionRows/Name.vue index b4ddfc849..b2e0830fc 100644 --- a/frontend/src/components/TransactionRows/Name.vue +++ b/frontend/src/components/TransactionRows/Name.vue @@ -36,13 +36,22 @@ export default { methods: { async tunnelEmail() { if (this.$route.path !== '/send') await this.$router.push({ path: '/send' }) - this.$router.push({ query: { gradidoID: this.linkedUser.gradidoID } }) + this.$router.push({ + query: { + gradidoID: this.linkedUser.gradidoID, + communityUuid: this.linkedUser.communityUuid, + }, + }) }, }, computed: { itemText() { return this.linkedUser - ? this.linkedUser.firstName + ' ' + this.linkedUser.lastName + ? this.linkedUser.alias + ? this.linkedUser.alias + + (this.linkedUser.communityName ? ' / ' + this.linkedUser.communityName : '') + : this.linkedUser.firstName + ' ' + this.linkedUser.lastName + + (this.linkedUser.communityName ? ' / ' + this.linkedUser.communityName : '') : this.text }, }, diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index 6ef5d56d6..584f9d34b 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -40,7 +40,10 @@ export const transactionsQuery = gql` linkedUser { firstName lastName + communityUuid + communityName gradidoID + alias } decay { decay @@ -281,6 +284,7 @@ export const user = gql` user(identifier: $identifier) { firstName lastName + communityName } } `