Files
gruperly/packages/shared/src/schemas/payments.ts
2026-09-17 18:58:00 -03:00

35 lines
1.1 KiB
TypeScript

import { z } from 'zod';
import { createPageSchema, createPageSizeSchema, createPaginationSchema } from './pagination.js';
const isoDateTimeSchema = z.string().datetime();
const pageSchema = createPageSchema();
const pageSizeSchema = createPageSizeSchema(10);
const paginationSchema = createPaginationSchema();
export const paymentStatusSchema = z.enum(['PENDING', 'PAID', 'OVERDUE', 'CANCELLED']);
export const PaymentDtoSchema = z.object({
id: z.string(),
groupId: z.string(),
attendeeId: z.string(),
amount: z.coerce.number().positive(),
currency: z.string(),
status: paymentStatusSchema,
dueDate: isoDateTimeSchema,
paidAt: isoDateTimeSchema.nullable(),
createdAt: isoDateTimeSchema,
updatedAt: isoDateTimeSchema,
});
export type PaymentDto = z.output<typeof PaymentDtoSchema>;
export const PaymentQuerySchema = z.object({
page: pageSchema,
pageSize: pageSizeSchema,
});
export type PaymentQuery = z.output<typeof PaymentQuerySchema>;
export const PaymentListSchema = z.object({
data: z.array(PaymentDtoSchema),
pagination: paginationSchema,
});
export type PaymentList = z.output<typeof PaymentListSchema>;