import { protectedProcedure } from '../../procedure'; import { router } from '../../trpc'; import { EltInputSchema, EltOutputSchema } from './types'; import { getEltOsago } from '@/api/elt/query'; import initializeApollo from '@/apollo/client'; import eltHelper from '@/process/elt/lib/helper'; import { makeEltOsagoRequest, ownOsagoRequest } from '@/process/elt/lib/request'; import { convertEltOsagoResponse, convertOwnOsagoResult } from '@/process/elt/lib/response'; import RootStore from '@/stores/root'; import { createTRPCError } from '@/utils/trpc'; export const eltOsagoRouter = router({ eltOsago: protectedProcedure .input(EltInputSchema) .output(EltOutputSchema) .mutation(async ({ input, ctx }) => { try { const apolloClient = initializeApollo(null, ctx.headers); const store = new RootStore(); store.$calculation.$values.hydrate(input.calculation.values); const context = { apolloClient, store }; const { init: initElt } = await eltHelper({ apolloClient, store }); const { osago: initRows } = await initElt(); const requests = initRows.map(async (row) => { if (row.metodCalc === 'CRM') { return ownOsagoRequest({ apolloClient, store }, row).then((request) => convertOwnOsagoResult(request, row) ); } return makeEltOsagoRequest({ apolloClient, store }, row).then((request) => getEltOsago(request) .then((response) => convertEltOsagoResponse({ context, response, row })) .catch((error) => ({ ...row, message: error.message, status: 'error' })) ); }); return { rows: await Promise.all(requests), }; } catch (error) { throw createTRPCError(error); } }), });