File size: 1,057 Bytes
c09f67c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import { z } from "zod";
import type { Transaction } from "./types";
export const createTransactionSchema = z.object({
name: z.string(),
currency: z.string(),
bank_account_id: z.string(),
team_id: z.string(),
internal_id: z.string(),
status: z.enum(["posted", "pending"]),
method: z.enum(["card", "bank", "other"]),
date: z.string().date(),
amount: z.number(),
manual: z.boolean(),
category_slug: z.string().nullable(),
});
export const validateTransactions = (transactions: Transaction[]) => {
const processedTransactions = transactions.map((transaction) =>
createTransactionSchema.safeParse(transaction),
);
const validTransactions = processedTransactions.filter(
(transaction) => transaction.success,
);
const invalidTransactions = processedTransactions.filter(
(transaction) => !transaction.success,
);
return {
validTransactions: validTransactions.map((transaction) => transaction.data),
invalidTransactions: invalidTransactions.map(
(transaction) => transaction.error,
),
};
};
|