@accounter/server
Version:
Accounter GraphQL server
45 lines (40 loc) • 1.45 kB
text/typescript
import { GraphQLError } from 'graphql';
import type { Maybe, ResolverFn, ResolversParentTypes } from '../../../../__generated__/types.js';
import { formatAmount } from '../../../../shared/helpers/index.js';
import { TransactionsProvider } from '../../../transactions/providers/transactions.provider.js';
import { Suggestion } from './charge-suggestions.resolver.js';
export const missingConversionInfoSuggestions: ResolverFn<
Maybe<Suggestion>,
ResolversParentTypes['Charge'],
GraphQLModules.Context,
object
> = async (DbCharge, _, { injector }) => {
const transactions = await injector
.get(TransactionsProvider)
.transactionsByChargeIDLoader.load(DbCharge.id);
let fromCurrency: string | undefined;
let toCurrency: string | undefined;
for (const transaction of transactions) {
if (transaction.is_fee) continue;
const amount = formatAmount(transaction.amount);
if (amount > 0) {
if (toCurrency) {
throw new GraphQLError('Multiple destination currencies in Kraken conversion');
}
toCurrency = transaction.currency;
}
if (amount < 0) {
if (fromCurrency) {
throw new GraphQLError('Multiple source currencies in Kraken conversion');
}
fromCurrency = transaction.currency;
}
if (fromCurrency && toCurrency) {
return {
description: `${fromCurrency} to ${toCurrency} conversion`,
tags: [],
};
}
}
return null;
};