From 7d8b97b8611b559a4745fe9b8505486812379c29 Mon Sep 17 00:00:00 2001 From: Claus-Peter Huebner Date: Thu, 24 Aug 2023 21:27:50 +0200 Subject: [PATCH] correct voteSendCoins graphql schema --- .../federation/client/1_0/SendCoinsClient.ts | 2 +- .../client/1_0/query/voteForSendCoins.ts | 6 +-- .../api/1_0/resolver/SendCoinsResolver.ts | 49 ++++++++++++------- .../scalar/{Decimal.ts.unused => Decimal.ts} | 5 +- federation/src/graphql/schema.ts | 6 +-- 5 files changed, 40 insertions(+), 28 deletions(-) rename federation/src/graphql/scalar/{Decimal.ts.unused => Decimal.ts} (74%) diff --git a/backend/src/federation/client/1_0/SendCoinsClient.ts b/backend/src/federation/client/1_0/SendCoinsClient.ts index cc0cd7ca4..bc6d9c58d 100644 --- a/backend/src/federation/client/1_0/SendCoinsClient.ts +++ b/backend/src/federation/client/1_0/SendCoinsClient.ts @@ -33,7 +33,7 @@ export class SendCoinsClient { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const { data } = await this.client.rawRequest(voteForSendCoins, { args }) // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - if (!data?.voteForSendCoins?.vote) { + if (!data?.voteForSendCoins) { logger.warn('X-Com: voteForSendCoins without response data from endpoint', this.endpoint) return false } diff --git a/backend/src/federation/client/1_0/query/voteForSendCoins.ts b/backend/src/federation/client/1_0/query/voteForSendCoins.ts index 4f4dd892a..9cdae73f3 100644 --- a/backend/src/federation/client/1_0/query/voteForSendCoins.ts +++ b/backend/src/federation/client/1_0/query/voteForSendCoins.ts @@ -4,6 +4,7 @@ export const voteForSendCoins = gql` mutation ( $communityReceiverIdentifier: String! $userReceiverIdentifier: String! + $creationDate: Date! $amount: Decimal! $memo: String! $communitySenderIdentifier: String! @@ -13,13 +14,12 @@ export const voteForSendCoins = gql` voteForSendCoins( communityReceiverIdentifier: $communityReceiverIdentifier userReceiverIdentifier: $userReceiverIdentifier + creationDate: $creationDate amount: $amount memo: $memo communitySenderIdentifier: $communitySenderIdentifier userSenderIdentifier: $userSenderIdentifier userSenderName: $userSenderName - ) { - vote - } + ) } ` diff --git a/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts index 06247a425..dd8958e9f 100644 --- a/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts +++ b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts @@ -1,5 +1,5 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars -import { Mutation, Query, Resolver } from 'type-graphql' +import { Args, Mutation, Query, Resolver } from 'type-graphql' import { federationLogger as logger } from '@/server/logger' import { Community as DbCommunity } from '@entity/Community' import { PendingTransaction as DbPendingTransaction } from '@entity/PendingTransaction' @@ -16,50 +16,61 @@ import { fullName } from '@/graphql/util/fullName' // eslint-disable-next-line @typescript-eslint/no-unused-vars export class SendCoinsResolver { @Mutation(() => Boolean) - async voteForSendCoins(args: SendCoinsArgs): Promise { + async voteForSendCoins( + @Args() + { + communityReceiverIdentifier, + userReceiverIdentifier, + creationDate, + amount, + memo, + communitySenderIdentifier, + userSenderIdentifier, + userSenderName, + }: SendCoinsArgs, + ): Promise { logger.debug(`voteForSendCoins() via apiVersion=1_0 ...`) try { // first check if receiver community is correct const homeCom = await DbCommunity.findOneBy({ - communityUuid: args.communityReceiverIdentifier, + communityUuid: communityReceiverIdentifier, }) if (!homeCom) { - throw new LogError(`voteForSendCoins with wrong communityReceiverIdentifier`) + throw new LogError( + `voteForSendCoins with wrong communityReceiverIdentifier`, + communityReceiverIdentifier, + ) } // second check if receiver user exists in this community - const receiverUser = await DbUser.findOneBy({ gradidoID: args.userReceiverIdentifier }) + const receiverUser = await DbUser.findOneBy({ gradidoID: userReceiverIdentifier }) if (!receiverUser) { throw new LogError( `voteForSendCoins with unknown userReceiverIdentifier in the community=`, homeCom.name, ) } - const receiveBalance = await calculateRecepientBalance( - receiverUser.id, - args.amount, - args.creationDate, - ) + const receiveBalance = await calculateRecepientBalance(receiverUser.id, amount, creationDate) const pendingTx = DbPendingTransaction.create() - pendingTx.amount = args.amount + pendingTx.amount = amount pendingTx.balance = receiveBalance ? receiveBalance.balance : new Decimal(0) - pendingTx.balanceDate = args.creationDate + pendingTx.balanceDate = creationDate pendingTx.decay = receiveBalance ? receiveBalance.decay.decay : new Decimal(0) pendingTx.decayStart = receiveBalance ? receiveBalance.decay.start : null - pendingTx.linkedUserCommunityUuid = args.communitySenderIdentifier - pendingTx.linkedUserGradidoID = args.userSenderIdentifier - pendingTx.linkedUserName = args.userSenderName - pendingTx.memo = args.memo + pendingTx.linkedUserCommunityUuid = communitySenderIdentifier + pendingTx.linkedUserGradidoID = userSenderIdentifier + pendingTx.linkedUserName = userSenderName + pendingTx.memo = memo pendingTx.previous = receiveBalance ? receiveBalance.lastTransactionId : null pendingTx.state = PendingTransactionState.NEW pendingTx.typeId = TransactionTypeId.RECEIVE - pendingTx.userCommunityUuid = args.communityReceiverIdentifier - pendingTx.userGradidoID = args.userReceiverIdentifier + pendingTx.userCommunityUuid = communityReceiverIdentifier + pendingTx.userGradidoID = userReceiverIdentifier pendingTx.userName = fullName(receiverUser.firstName, receiverUser.lastName) await DbPendingTransaction.insert(pendingTx) logger.debug(`voteForSendCoins()-1_0... successfull`) } catch (err) { - throw new LogError(`Error in voteForSendCoins with args=`, args) + throw new LogError(`Error in voteForSendCoins: `, err) } return true } diff --git a/federation/src/graphql/scalar/Decimal.ts.unused b/federation/src/graphql/scalar/Decimal.ts similarity index 74% rename from federation/src/graphql/scalar/Decimal.ts.unused rename to federation/src/graphql/scalar/Decimal.ts index da5a99e0c..96804bdfa 100644 --- a/federation/src/graphql/scalar/Decimal.ts.unused +++ b/federation/src/graphql/scalar/Decimal.ts @@ -1,7 +1,8 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +import { Decimal } from 'decimal.js-light' import { GraphQLScalarType, Kind } from 'graphql' -import Decimal from 'decimal.js-light' -export default new GraphQLScalarType({ +export const DecimalScalar = new GraphQLScalarType({ name: 'Decimal', description: 'The `Decimal` scalar type to represent currency values', diff --git a/federation/src/graphql/schema.ts b/federation/src/graphql/schema.ts index 015ea124f..0951c1000 100644 --- a/federation/src/graphql/schema.ts +++ b/federation/src/graphql/schema.ts @@ -2,15 +2,15 @@ import { GraphQLSchema } from 'graphql' import { buildSchema } from 'type-graphql' // import isAuthorized from './directive/isAuthorized' -// import DecimalScalar from './scalar/Decimal' -// import Decimal from 'decimal.js-light' +import { DecimalScalar } from './scalar/Decimal' +import { Decimal } from 'decimal.js-light' import { getApiResolvers } from './api/schema' const schema = async (): Promise => { return await buildSchema({ resolvers: [getApiResolvers()], // authChecker: isAuthorized, - // scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], + scalarsMap: [{ type: Decimal, scalar: DecimalScalar }], }) }