import { Request as ExpressRequest } from "express"; import { z } from "zod"; export type Request = ExpressRequest & { user?: User; }; export type User = { id: number; username: string; fullname: string; password: string; created: Date; }; export type Account = { id: number; name: string; user_id: number; iban: string; balance: number; }; export type Transaction = { id: number; user_id: number; account_id: number; amount: number; type: string; description: string; date: string; }; export const LoginSchema = z.object({ username: z.email(), password: z.string().min(8), }); export type TransactionType = { name: string; count: number; }; export const TransactionTypesQuerySchema = z.object({ accountId: z.preprocess( (val) => (val ? Number(val) : undefined), z.number().optional(), ), }); export type PaginationRespone = { data: T[]; meta: { total: number; page: number; hasMore: boolean; }; }; export type TransactionTypesQuery = z.infer; export const TransactionsQuerySchema = z.object({ search: z.string().optional().default(""), sort: z.string().optional().default("date"), order: z.enum(["asc", "desc"]).optional().default("desc"), page: z.preprocess((val) => Number(val ?? 1), z.int().min(1)).default(1), limit: z .preprocess((val) => Number(val ?? 25), z.int().min(1).max(100)) .default(25), accountId: z.preprocess( (val) => (val ? Number(val) : undefined), z.number().optional(), ), type: z.string().optional(), }); export type TransactionsQuery = z.infer;