UNPKG

@accounter/server

Version:

83 lines (80 loc) 3.29 kB
import { format } from 'date-fns'; import { GraphQLError } from 'graphql'; import { BusinessesProvider } from '@modules/financial-entities/providers/businesses.provider.js'; import { TransactionsProvider } from '@modules/transactions/providers/transactions.provider.js'; import { IGetTransactionsByIdsResult } from '@modules/transactions/types.js'; import { formatFinancialAmount } from '@shared/helpers'; import { TimelessDateString } from '@shared/types'; import { BusinessTripsProvider } from '../providers/business-trips.provider.js'; import type { BusinessTripsModule } from '../types.js'; export const commonChargeFields: BusinessTripsModule.ChargeResolvers = { businessTrip: (dbCharge, _, { injector }) => { if (!dbCharge.business_trip_id) { return null; } try { return injector .get(BusinessTripsProvider) .getBusinessTripsByIdLoader.load(dbCharge.business_trip_id) .then(businessTrip => businessTrip ?? null); } catch (e) { console.error(`Error finding business trip for charge id ${dbCharge.id}:`, e); throw new GraphQLError(`Error finding business trip for charge id ${dbCharge.id}`); } }, }; export const commonBusinessTransactionFields: BusinessTripsModule.BusinessTripTransactionResolvers = { id: DbTransaction => DbTransaction.id, businessTrip: (DbTransaction, _, { injector }) => injector .get(BusinessTripsProvider) .getBusinessTripsByIdLoader.load(DbTransaction.business_trip_id) .then(res => { if (!res) { throw new GraphQLError( `Business trip with id ${DbTransaction.business_trip_id} not found`, ); } return res; }), date: DbTransaction => DbTransaction.date ? (format(DbTransaction.date, 'yyyy-MM-dd') as TimelessDateString) : null, valueDate: DbTransaction => DbTransaction.value_date ? (format(DbTransaction.value_date, 'yyyy-MM-dd') as TimelessDateString) : null, amount: DbTransaction => DbTransaction.amount && DbTransaction.currency ? formatFinancialAmount(DbTransaction.amount, DbTransaction.currency) : null, employee: (DbTransaction, _, { injector }) => DbTransaction.employee_business_id ? injector .get(BusinessesProvider) .getBusinessByIdLoader.load(DbTransaction.employee_business_id) .then(res => { if (!res) { throw new GraphQLError( `Employee with id ${DbTransaction.employee_business_id} not found`, ); } return res; }) : null, transaction: async (DbTransaction, _, { injector }) => DbTransaction.transaction_id ? injector .get(TransactionsProvider) .getTransactionByIdLoader.load(DbTransaction.transaction_id) .then(res => { if (!res) { throw new GraphQLError( `Transaction with id ${DbTransaction.transaction_id} not found`, ); } return res as IGetTransactionsByIdsResult; }) : await null, payedByEmployee: dbTransaction => dbTransaction.payed_by_employee, };