import formatAxiosErrors, { formatMessageErrors, formatResponse, formatYupErrors, } from "../utils/formatResponse"; import { AxiosInstance } from "axios"; import payqrcodeMock from "../mocks/payqrcode"; import yup from "../config/yup"; import { KEYTYPES } from "../utils/constants"; //import dateTransacValidator from "../utils/dateTransacValidator"; export interface Post { key_type: number; amount: number; key: string | number; } const PayloadSchema = yup.object().shape({ key_type: yup.mixed().oneOf(KEYTYPES).required(), amount: yup.number(), key: yup.number().required(), /* payment_date: yup.string().test("date-error", "", function (value: string) { const { path, createError } = this; const validDate = dateTransacValidator(value); return ( validDate.isValid || createError({ path, message: validDate.message, }) ); }), */ }); const initializeService = (fetcher: AxiosInstance, isMock: boolean) => { const post = async (payload: Post) => { // YUP VALIDATION if (!PayloadSchema.isValidSync(payload)) { const validationResult = await PayloadSchema.validate(payload, { abortEarly: false, }).catch((err) => err); return formatYupErrors(validationResult); } // MOCK TRUE if (isMock) { const { id, created_at, authentication } = payqrcodeMock; return formatResponse( { id, ...payload, authentication, created_at, }, false, "Criado com sucesso" ); } // MOCK FALSE try { const { data } = await fetcher.request({ url: `/qrcode/`, method: "post", data: payload, }); if (!data) { return formatMessageErrors("Erro na chamada"); } return formatResponse(data, false, "Criado com sucesso"); } catch (err) { return formatAxiosErrors(err); } }; return { post, }; }; export default initializeService;