UNPKG

@accounter/server

Version:

The test suite is split into three Vitest projects for efficiency and isolation:

418 lines (416 loc) • 17.5 kB
import { GraphQLError } from 'graphql'; import { Currency } from '../../../shared/enums.js'; import { dateToTimelessDateString } from '../../../shared/helpers/index.js'; import { TagsProvider } from '../../tags/providers/tags.provider.js'; import { fetchBusiness, fetchTaxCategory } from '../helpers/admin-context.helper.js'; import { AdminContextProvider } from '../providers/admin-context.provider.js'; import type { AdminContextModule } from '../types.js'; export const adminContextResolvers: AdminContextModule.Resolvers = { Query: { adminContext: (_, { ownerId }, { injector, adminContext: { defaultAdminBusinessId } }) => injector .get(AdminContextProvider) .getAdminContextLoader.load(ownerId ?? defaultAdminBusinessId) .then(res => { if (!res) { const message = 'Admin context not found'; console.error(`${message} for owner id "${ownerId}"`); throw new GraphQLError(message); } return res; }) .catch(e => { if (e instanceof GraphQLError) { throw e; } console.error(JSON.stringify(e, null, 2)); throw new GraphQLError(`Error fetching admin context`); }), }, Mutation: { updateAdminContext: (_, { context }, { injector }) => injector .get(AdminContextProvider) .updateAdminContext({ ...context, }) .then(res => { if (!res[0]) { throw new GraphQLError(`Error updating admin context`); } return res[0]; }) .catch(e => { if (e instanceof GraphQLError) { throw e; } console.error(JSON.stringify(e, null, 2)); throw new GraphQLError(`Error updating admin context`); }), }, AdminContext: { id: dbAdminContext => dbAdminContext.owner_id, ownerId: dbAdminContext => dbAdminContext.owner_id, defaultLocalCurrency: dbAdminContext => dbAdminContext.default_local_currency as Currency, defaultForeignCurrency: dbAdminContext => dbAdminContext.default_fiat_currency_for_crypto_conversions as Currency, defaultTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory(injector, 'defaultTaxCategory', dbAdminContext.default_tax_category_id), locality: dbAdminContext => dbAdminContext.locality, vatBusiness: async (dbAdminContext, _, { injector }) => fetchBusiness(injector, 'vatBusiness', dbAdminContext.vat_business_id), inputVatTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory(injector, 'inputVatTaxCategory', dbAdminContext.input_vat_tax_category_id), outputVatTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory(injector, 'outputVatTaxCategory', dbAdminContext.output_vat_tax_category_id), propertyOutputVatTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'propertyOutputVatTaxCategory', dbAdminContext.property_output_vat_tax_category_id, ), taxBusiness: async (dbAdminContext, _, { injector }) => fetchBusiness(injector, 'taxBusiness', dbAdminContext.tax_business_id), taxExpensesTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'taxExpensesTaxCategory', dbAdminContext.tax_expenses_tax_category_id, ), socialSecurityBusiness: async (dbAdminContext, _, { injector }) => fetchBusiness(injector, 'socialSecurityBusiness', dbAdminContext.social_security_business_id), exchangeRateTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'exchangeRateTaxCategory', dbAdminContext.exchange_rate_tax_category_id, ), incomeExchangeRateTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'incomeExchangeRateTaxCategory', dbAdminContext.income_exchange_rate_tax_category_id, ), exchangeRateRevaluationTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'exchangeRateRevaluationTaxCategory', dbAdminContext.exchange_rate_revaluation_tax_category_id, ), feeTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory(injector, 'feeTaxCategory', dbAdminContext.fee_tax_category_id), generalFeeTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'generalFeeTaxCategory', dbAdminContext.general_fee_tax_category_id, ), fineTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory(injector, 'fineTaxCategory', dbAdminContext.fine_tax_category_id), untaxableGiftsTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'untaxableGiftsTaxCategory', dbAdminContext.untaxable_gifts_tax_category_id, ), balanceCancellationTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'balanceCancellationTaxCategory', dbAdminContext.balance_cancellation_tax_category_id, ), developmentForeignTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'developmentForeignTaxCategory', dbAdminContext.development_foreign_tax_category_id, ), developmentLocalTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'developmentLocalTaxCategory', dbAdminContext.development_local_tax_category_id, ), accumulatedDepreciationTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.accumulated_depreciation_tax_category_id ? fetchTaxCategory( injector, 'accumulatedDepreciationTaxCategory', dbAdminContext.accumulated_depreciation_tax_category_id, ) : null, rndDepreciationExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.rnd_depreciation_expenses_tax_category_id ? fetchTaxCategory( injector, 'rndDepreciationExpensesTaxCategory', dbAdminContext.rnd_depreciation_expenses_tax_category_id, ) : null, gnmDepreciationExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.gnm_depreciation_expenses_tax_category_id ? fetchTaxCategory( injector, 'gnmDepreciationExpensesTaxCategory', dbAdminContext.gnm_depreciation_expenses_tax_category_id, ) : null, marketingDepreciationExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.marketing_depreciation_expenses_tax_category_id ? fetchTaxCategory( injector, 'marketingDepreciationExpensesTaxCategory', dbAdminContext.marketing_depreciation_expenses_tax_category_id, ) : null, bankDepositInterestIncomeTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.bank_deposit_interest_income_tax_category_id ? fetchTaxCategory( injector, 'bankDepositInterestIncomeTaxCategory', dbAdminContext.bank_deposit_interest_income_tax_category_id, ) : null, businessTripTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.business_trip_tax_category_id ? fetchTaxCategory( injector, 'businessTripTaxCategory', dbAdminContext.business_trip_tax_category_id, ) : null, businessTripTag: async (dbAdminContext, _, { injector }) => { if (!dbAdminContext.business_trip_tag_id) { return null; } return injector .get(TagsProvider) .getTagByIDLoader.load(dbAdminContext.business_trip_tag_id) .then(res => { if (!res) { throw new GraphQLError( `Business trip tag (with ID="${dbAdminContext.business_trip_tag_id}") not found`, ); } return res; }) .catch(e => { if (e instanceof GraphQLError) { throw e; } console.error(JSON.stringify(e, null, 2)); throw new GraphQLError(`Error fetching business trip tag`); }); }, expensesToPayTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'expensesToPayTaxCategory', dbAdminContext.expenses_to_pay_tax_category_id, ), expensesInAdvanceTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'expensesInAdvanceTaxCategory', dbAdminContext.expenses_in_advance_tax_category_id, ), incomeToCollectTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'incomeToCollectTaxCategory', dbAdminContext.income_to_collect_tax_category_id, ), incomeInAdvanceTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.income_in_advance_tax_category_id ? fetchTaxCategory( injector, 'incomeInAdvanceTaxCategory', dbAdminContext.income_in_advance_tax_category_id, ) : null, zkufotExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.zkufot_expenses_tax_category_id ? fetchTaxCategory( injector, 'zkufotExpensesTaxCategory', dbAdminContext.zkufot_expenses_tax_category_id, ) : null, zkufotIncomeTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.zkufot_income_tax_category_id ? fetchTaxCategory( injector, 'zkufotIncomeTaxCategory', dbAdminContext.zkufot_income_tax_category_id, ) : null, socialSecurityExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.social_security_expenses_tax_category_id ? fetchTaxCategory( injector, 'socialSecurityExpensesTaxCategory', dbAdminContext.social_security_expenses_tax_category_id, ) : null, salaryExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.salary_expenses_tax_category_id ? fetchTaxCategory( injector, 'salaryExpensesTaxCategory', dbAdminContext.salary_expenses_tax_category_id, ) : null, trainingFundExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.training_fund_expenses_tax_category_id ? fetchTaxCategory( injector, 'trainingFundExpensesTaxCategory', dbAdminContext.training_fund_expenses_tax_category_id, ) : null, pensionFundExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.pension_fund_expenses_tax_category_id ? fetchTaxCategory( injector, 'pensionFundExpensesTaxCategory', dbAdminContext.pension_fund_expenses_tax_category_id, ) : null, compensationFundExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.compensation_fund_expenses_tax_category_id ? fetchTaxCategory( injector, 'compensationFundExpensesTaxCategory', dbAdminContext.compensation_fund_expenses_tax_category_id, ) : null, batchedEmployeesBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.batched_employees_business_id ? fetchBusiness( injector, 'batchedEmployeesBusiness', dbAdminContext.batched_employees_business_id, ) : null, batchedFundsBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.batched_funds_business_id ? fetchBusiness(injector, 'batchedFundsBusiness', dbAdminContext.batched_funds_business_id) : null, taxDeductionsBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.tax_deductions_business_id ? fetchBusiness( injector, 'taxDeductionsBusiness', dbAdminContext.tax_deductions_business_id, ) : null, recoveryReserveExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.recovery_reserve_expenses_tax_category_id ? fetchTaxCategory( injector, 'recoveryReserveExpensesTaxCategory', dbAdminContext.recovery_reserve_expenses_tax_category_id, ) : null, recoveryReserveTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.recovery_reserve_tax_category_id ? fetchTaxCategory( injector, 'recoveryReserveTaxCategory', dbAdminContext.recovery_reserve_tax_category_id, ) : null, vacationReserveExpensesTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.vacation_reserve_expenses_tax_category_id ? fetchTaxCategory( injector, 'vacationReserveExpensesTaxCategory', dbAdminContext.vacation_reserve_expenses_tax_category_id, ) : null, vacationReserveTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.vacation_reserve_tax_category_id ? fetchTaxCategory( injector, 'vacationReserveTaxCategory', dbAdminContext.vacation_reserve_tax_category_id, ) : null, poalimBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.poalim_business_id ? fetchBusiness(injector, 'poalimBusiness', dbAdminContext.poalim_business_id) : null, discountBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.discount_business_id ? fetchBusiness(injector, 'discountBusiness', dbAdminContext.discount_business_id) : null, isracardBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.isracard_business_id ? fetchBusiness(injector, 'isracardBusiness', dbAdminContext.isracard_business_id) : null, amexBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.amex_business_id ? fetchBusiness(injector, 'amexBusiness', dbAdminContext.amex_business_id) : null, calBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.cal_business_id ? fetchBusiness(injector, 'calBusiness', dbAdminContext.cal_business_id) : null, etanaBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.etana_business_id ? fetchBusiness(injector, 'etanaBusiness', dbAdminContext.etana_business_id) : null, krakenBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.kraken_business_id ? fetchBusiness(injector, 'krakenBusiness', dbAdminContext.kraken_business_id) : null, etherscanBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.etherscan_business_id ? fetchBusiness(injector, 'etherscanBusiness', dbAdminContext.etherscan_business_id) : null, swiftBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.swift_business_id ? fetchBusiness(injector, 'swiftBusiness', dbAdminContext.swift_business_id) : null, bankDepositBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.bank_deposit_business_id ? fetchBusiness(injector, 'bankDepositBusiness', dbAdminContext.bank_deposit_business_id) : null, dividendWithholdingTaxBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.dividend_withholding_tax_business_id ? fetchBusiness( injector, 'dividendWithholdingTaxBusiness', dbAdminContext.dividend_withholding_tax_business_id, ) : null, dividendTaxCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.dividend_tax_category_id ? fetchTaxCategory(injector, 'dividendTaxCategory', dbAdminContext.dividend_tax_category_id) : null, salaryExcessExpensesTaxCategory: async (dbAdminContext, _, { injector }) => fetchTaxCategory( injector, 'salaryExcessExpensesTaxCategory', dbAdminContext.salary_excess_expenses_tax_category_id, ), ledgerLock: dbAdminContext => dbAdminContext.ledger_lock ? dateToTimelessDateString(dbAdminContext.ledger_lock) : null, foreignSecuritiesBusiness: async (dbAdminContext, _, { injector }) => dbAdminContext.foreign_securities_business_id ? fetchBusiness( injector, 'foreignSecuritiesBusiness', dbAdminContext.foreign_securities_business_id, ) : null, foreignSecuritiesFeesCategory: async (dbAdminContext, _, { injector }) => dbAdminContext.foreign_securities_fees_category_id ? fetchTaxCategory( injector, 'foreignSecuritiesFeesCategory', dbAdminContext.foreign_securities_fees_category_id, ) : null, }, };