trpc: validation errors now throw 400 error
This commit is contained in:
parent
240b92f84d
commit
3aea4c439f
@ -34,24 +34,15 @@ export async function action({ store, trpcClient }: ProcessContext) {
|
||||
values,
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.success === false) {
|
||||
notification.error({
|
||||
description: res.error,
|
||||
key,
|
||||
message: errorMessage,
|
||||
placement: 'bottomRight',
|
||||
});
|
||||
} else {
|
||||
$results.setPayments(res.data.resultPayments);
|
||||
$results.setValues(res.data.resultValues);
|
||||
$calculation.$values.setValues(res.data.values);
|
||||
$results.setPayments(res.data.resultPayments);
|
||||
$results.setValues(res.data.resultValues);
|
||||
$calculation.$values.setValues(res.data.values);
|
||||
|
||||
notification.success({
|
||||
key,
|
||||
message: successMessage,
|
||||
placement: 'bottomRight',
|
||||
});
|
||||
}
|
||||
notification.success({
|
||||
key,
|
||||
message: successMessage,
|
||||
placement: 'bottomRight',
|
||||
});
|
||||
})
|
||||
.catch((error_) => {
|
||||
const error = error_ as Error;
|
||||
|
||||
@ -42,42 +42,33 @@ export function action({ store, trpcClient, apolloClient }: ProcessContext) {
|
||||
values,
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (res.success === false) {
|
||||
notification.error({
|
||||
description: res.error,
|
||||
key,
|
||||
message: errorMessage,
|
||||
placement: 'bottomRight',
|
||||
});
|
||||
} else {
|
||||
$results.setPayments(res.data.resultPayments);
|
||||
$results.setValues(res.data.resultValues);
|
||||
$calculation.$values.setValues({ ...res.data.values, recalcWithRevision: false });
|
||||
$results.setPayments(res.data.resultPayments);
|
||||
$results.setValues(res.data.resultValues);
|
||||
$calculation.$values.setValues({ ...res.data.values, recalcWithRevision: false });
|
||||
|
||||
notification.success({
|
||||
key,
|
||||
message: successMessage,
|
||||
placement: 'bottomRight',
|
||||
notification.success({
|
||||
key,
|
||||
message: successMessage,
|
||||
placement: 'bottomRight',
|
||||
});
|
||||
|
||||
const leadid = $calculation.element('selectLead').getValue();
|
||||
|
||||
if (leadid) {
|
||||
const {
|
||||
data: { quotes },
|
||||
} = await apolloClient.query({
|
||||
fetchPolicy: 'network-only',
|
||||
query: CRMTypes.GetQuotesDocument,
|
||||
variables: {
|
||||
leadid,
|
||||
},
|
||||
});
|
||||
|
||||
const leadid = $calculation.element('selectLead').getValue();
|
||||
|
||||
if (leadid) {
|
||||
const {
|
||||
data: { quotes },
|
||||
} = await apolloClient.query({
|
||||
fetchPolicy: 'network-only',
|
||||
query: CRMTypes.GetQuotesDocument,
|
||||
variables: {
|
||||
leadid,
|
||||
},
|
||||
});
|
||||
|
||||
$calculation
|
||||
.element('selectQuote')
|
||||
.setOptions(normalizeOptions(quotes))
|
||||
.setValue(values.quote);
|
||||
}
|
||||
$calculation
|
||||
.element('selectQuote')
|
||||
.setOptions(normalizeOptions(quotes))
|
||||
.setValue(values.quote);
|
||||
}
|
||||
})
|
||||
.catch((error_) => {
|
||||
|
||||
@ -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 { HttpError } from '@/utils/error';
|
||||
import { createTRPCError } from '@/utils/trpc';
|
||||
import { QueryClient } from '@tanstack/react-query';
|
||||
|
||||
@ -18,40 +19,37 @@ export const calculateRouter = router({
|
||||
const apolloClient = initializeApollo();
|
||||
const queryClient = new QueryClient();
|
||||
|
||||
if (!ctx.unlimited) {
|
||||
const validationResult = await validate({
|
||||
try {
|
||||
if (!ctx.unlimited) {
|
||||
const validationResult = await validate({
|
||||
context: {
|
||||
apolloClient,
|
||||
queryClient,
|
||||
user: ctx.user,
|
||||
},
|
||||
input,
|
||||
});
|
||||
|
||||
if (validationResult.success === false) {
|
||||
throw new HttpError(validationResult.message, 400);
|
||||
}
|
||||
}
|
||||
|
||||
let user: Pick<User, 'domainName'> = { domainName: ctx.user.domainName };
|
||||
if (ctx.unlimited && input.values.user) {
|
||||
user = { domainName: input.values.user };
|
||||
}
|
||||
|
||||
const requestData = await createRequestData({
|
||||
context: {
|
||||
apolloClient,
|
||||
queryClient,
|
||||
user: ctx.user,
|
||||
...ctx,
|
||||
user,
|
||||
},
|
||||
input,
|
||||
});
|
||||
|
||||
if (validationResult.success === false) {
|
||||
return {
|
||||
error: validationResult.error,
|
||||
success: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
let user: Pick<User, 'domainName'> = { domainName: ctx.user.domainName };
|
||||
if (ctx.unlimited && input.values.user) {
|
||||
user = { domainName: input.values.user };
|
||||
}
|
||||
|
||||
const requestData = await createRequestData({
|
||||
context: {
|
||||
apolloClient,
|
||||
queryClient,
|
||||
...ctx,
|
||||
user,
|
||||
},
|
||||
input,
|
||||
});
|
||||
|
||||
try {
|
||||
const calculateResult = await calculate(requestData);
|
||||
|
||||
const result = transformCalculateResults({
|
||||
|
||||
@ -49,14 +49,14 @@ export async function validate({ input, context }: { context: Context; input: Ca
|
||||
});
|
||||
|
||||
if (validationResult.success === false) {
|
||||
const error = getMessage(validationResult.error.errors);
|
||||
const message = getMessage(validationResult.error.errors);
|
||||
|
||||
return { error, success: false };
|
||||
return { message, success: false };
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
error: '',
|
||||
message: '',
|
||||
success: true,
|
||||
};
|
||||
}
|
||||
|
||||
@ -34,15 +34,9 @@ export const OutputDataSchema = z.object({
|
||||
|
||||
export type OutputData = z.infer<typeof OutputDataSchema>;
|
||||
|
||||
export const CalculateOutputSchema = z.union([
|
||||
z.object({
|
||||
data: OutputDataSchema,
|
||||
success: z.literal(true),
|
||||
}),
|
||||
z.object({
|
||||
error: z.string(),
|
||||
success: z.literal(false),
|
||||
}),
|
||||
]);
|
||||
export const CalculateOutputSchema = z.object({
|
||||
data: OutputDataSchema,
|
||||
success: z.literal(true),
|
||||
});
|
||||
|
||||
export type CalculateOutput = z.infer<typeof CalculateOutputSchema>;
|
||||
|
||||
@ -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 { HttpError } from '@/utils/error';
|
||||
import { createTRPCError } from '@/utils/trpc';
|
||||
import { QueryClient } from '@tanstack/react-query';
|
||||
|
||||
@ -97,30 +98,27 @@ export const quoteRouter = router({
|
||||
const apolloClient = initializeApollo();
|
||||
const queryClient = new QueryClient();
|
||||
|
||||
if (!ctx.unlimited) {
|
||||
const validationResult = await validate({
|
||||
context: {
|
||||
apolloClient,
|
||||
queryClient,
|
||||
user: ctx.user,
|
||||
},
|
||||
input,
|
||||
});
|
||||
|
||||
if (validationResult.success === false) {
|
||||
return {
|
||||
error: validationResult.error,
|
||||
success: false,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
let user: Pick<User, 'domainName'> = { domainName: ctx.user.domainName };
|
||||
if (ctx.unlimited && input.values.user) {
|
||||
user = { domainName: input.values.user };
|
||||
}
|
||||
|
||||
try {
|
||||
if (!ctx.unlimited) {
|
||||
const validationResult = await validate({
|
||||
context: {
|
||||
apolloClient,
|
||||
queryClient,
|
||||
user: ctx.user,
|
||||
},
|
||||
input,
|
||||
});
|
||||
|
||||
if (validationResult.success === false) {
|
||||
throw new HttpError(validationResult.message, 400);
|
||||
}
|
||||
}
|
||||
|
||||
let user: Pick<User, 'domainName'> = { domainName: ctx.user.domainName };
|
||||
if (ctx.unlimited && input.values.user) {
|
||||
user = { domainName: input.values.user };
|
||||
}
|
||||
|
||||
const requestData = await createRequestData({
|
||||
context: {
|
||||
apolloClient,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user