pass error code to trpc response

This commit is contained in:
vchikalkin 2023-10-04 16:42:47 +03:00
parent 0170d64700
commit 240b92f84d
3 changed files with 81 additions and 49 deletions

View File

@ -7,6 +7,7 @@ import { calculate } from '@/api/core/query';
import type { User } from '@/api/user/types';
import initializeApollo from '@/apollo/client';
import { protectedProcedure } from '@/server/procedure';
import { createTRPCError } from '@/utils/trpc';
import { QueryClient } from '@tanstack/react-query';
export const calculateRouter = router({
@ -50,22 +51,26 @@ export const calculateRouter = router({
input,
});
const calculateResult = await calculate(requestData);
try {
const calculateResult = await calculate(requestData);
const result = transformCalculateResults({
calculateInput: input,
requestCalculate: requestData,
responseCalculate: calculateResult,
});
const result = transformCalculateResults({
calculateInput: input,
requestCalculate: requestData,
responseCalculate: calculateResult,
});
// TEMP
if (ctx.unlimited) {
result.__calculateResult = calculateResult;
// TEMP
if (ctx.unlimited) {
result.__calculateResult = calculateResult;
}
return {
data: result,
success: true,
};
} catch (error) {
throw createTRPCError(error);
}
return {
data: result,
success: true,
};
}),
});

View File

@ -34,6 +34,7 @@ import * as price from '@/process/price';
import * as subsidy from '@/process/subsidy';
import * as supplierAgent from '@/process/supplier-agent';
import type { CalculationValues } from '@/stores/calculation/values/types';
import { createTRPCError } from '@/utils/trpc';
import { QueryClient } from '@tanstack/react-query';
const { DEFAULT_FINGAP_ROW, DEFAULT_KASKO_ROW, DEFAULT_OSAGO_ROW } = insuranceTable;
@ -119,47 +120,51 @@ export const quoteRouter = router({
user = { domainName: input.values.user };
}
const requestData = await createRequestData({
context: {
apolloClient,
queryClient,
...ctx,
user,
},
input,
});
try {
const requestData = await createRequestData({
context: {
apolloClient,
queryClient,
...ctx,
user,
},
input,
});
const calculateResult = await calculate(requestData);
const calculateResult = await calculate(requestData);
const requestCreateKP = compatRequestCreateKP({
domainName: user.domainName,
finGAP: input.fingap,
insurance: Object.values(input.insurance.values),
calculation: {
calculationValues: await compatValues(input.values, { apolloClient }),
...calculateResult,
preparedPayments: requestData.preparedPayments,
additionalData: requestData.additionalData,
},
elt: input.elt,
});
const requestCreateKP = compatRequestCreateKP({
domainName: user.domainName,
finGAP: input.fingap,
insurance: Object.values(input.insurance.values),
calculation: {
calculationValues: await compatValues(input.values, { apolloClient }),
...calculateResult,
preparedPayments: requestData.preparedPayments,
additionalData: requestData.additionalData,
},
elt: input.elt,
});
const createKPResult = await createKP(requestCreateKP);
const createKPResult = await createKP(requestCreateKP);
const result = transformCalculateResults({
calculateInput: input,
requestCalculate: requestData,
responseCalculate: calculateResult,
});
const result = transformCalculateResults({
calculateInput: input,
requestCalculate: requestData,
responseCalculate: calculateResult,
});
if (URL_CRM_DOWNLOADKP) {
result.values.downloadKp = URL_CRM_DOWNLOADKP?.concat(createKPResult.offerprintformapi);
if (URL_CRM_DOWNLOADKP) {
result.values.downloadKp = URL_CRM_DOWNLOADKP?.concat(createKPResult.offerprintformapi);
}
return {
data: result,
success: true,
};
} catch (error) {
throw createTRPCError(error);
}
return {
data: result,
success: true,
};
}),
});

22
apps/web/utils/trpc.ts Normal file
View File

@ -0,0 +1,22 @@
import { HttpError } from './error';
import { TRPCError } from '@trpc/server';
import type { TRPC_ERROR_CODE_KEY } from '@trpc/server/rpc';
export function createTRPCError(error: unknown) {
let code: TRPC_ERROR_CODE_KEY = 'INTERNAL_SERVER_ERROR';
let message = '';
if (error instanceof HttpError && error.statusCode === 400) {
code = 'BAD_REQUEST';
}
if (error instanceof Error) {
message = error.message;
}
return new TRPCError({
cause: error,
code,
message,
});
}