2024-08-15 11:54:28 +03:00

48 lines
1.8 KiB
TypeScript

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);
}
}),
});