2023-10-04 17:36:52 +03:00

63 lines
1.9 KiB
TypeScript

import type { CalculateInput, Context } from '../types';
import elementsTitles from '@/Components/Calculation/config/elements-titles';
import type { Elements } from '@/Components/Calculation/config/map/values';
import * as addProduct from '@/process/add-product';
import * as bonuses from '@/process/bonuses';
import * as configurator from '@/process/configurator';
import * as gibdd from '@/process/gibdd';
import * as insuranceProcess from '@/process/insurance';
import * as leasingObject from '@/process/leasing-object';
import * as paymentsProcess from '@/process/payments';
import * as price from '@/process/price';
import * as supplierAgent from '@/process/supplier-agent';
import type { ZodIssue } from 'zod';
const processes = [
configurator,
supplierAgent,
paymentsProcess,
price,
bonuses,
leasingObject,
gibdd,
insuranceProcess,
addProduct,
];
const titles = Object.assign(elementsTitles, {
fingap: 'Таблица Safe Finance',
insurance: 'Таблица страхования',
payments: 'Таблица платежей',
});
function getMessage(errors: ZodIssue[]) {
const elementName = errors?.at(0)?.path.at(0) as Elements;
const title = titles[elementName];
const message = errors?.at(0)?.message;
return `${title}: ${message}`;
}
export async function validate({ input, context }: { context: Context; input: CalculateInput }) {
for (const { createValidationSchema } of processes) {
const validationSchema = createValidationSchema(context);
const validationResult = await validationSchema.safeParseAsync({
...input.values,
fingap: input.fingap,
insurance: input.insurance,
payments: input.payments,
});
if (validationResult.success === false) {
const message = getMessage(validationResult.error.errors);
return { message, success: false };
}
}
return {
message: '',
success: true,
};
}