Uecko_ERP/modules/customers/src/web/schemas/customer.api.schema.ts

32 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-03-10 17:10:11 +00:00
import type { PaginationSchema } from "@erp/core";
import type { ArrayElement } from "@repo/rdx-utils";
import type { z } from "zod/v4";
2025-09-24 10:34:04 +00:00
import {
CreateCustomerRequestSchema,
GetCustomerByIdResponseSchema,
2025-10-20 09:35:24 +00:00
ListCustomersResponseSchema,
2025-09-24 10:34:04 +00:00
UpdateCustomerByIdRequestSchema,
2025-09-29 18:22:59 +00:00
} from "../../common";
2025-09-22 17:43:55 +00:00
2025-09-30 15:58:04 +00:00
// Esquemas (Zod) provenientes del servidor
export const CustomerSchema = GetCustomerByIdResponseSchema.omit({ metadata: true });
2025-09-22 17:43:55 +00:00
export const CustomerCreateSchema = CreateCustomerRequestSchema;
export const CustomerUpdateSchema = UpdateCustomerByIdRequestSchema;
2025-09-24 10:34:04 +00:00
2025-09-30 15:58:04 +00:00
// Tipos (derivados de Zod o DTOs del backend)
export type Customer = z.infer<typeof CustomerSchema>; // Entidad completa (GET/POST/PUT result)
export type CustomerCreateInput = z.infer<typeof CustomerCreateSchema>; // Cuerpo para crear
export type CustomerUpdateInput = z.infer<typeof CustomerUpdateSchema>; // Cuerpo para actualizar
2025-09-24 15:09:37 +00:00
2025-09-30 15:58:04 +00:00
// Resultado de consulta con criteria (paginado, etc.)
2025-10-20 09:35:24 +00:00
export const CustomersPageSchema = ListCustomersResponseSchema.omit({
metadata: true,
});
export type PaginatedResponse = z.infer<typeof PaginationSchema>;
export type CustomersPage = z.infer<typeof CustomersPageSchema>;
2025-09-30 15:58:04 +00:00
// Ítem simplificado dentro del listado (no toda la entidad)
2025-09-30 17:03:20 +00:00
export type CustomerSummary = Omit<ArrayElement<CustomersPage["items"]>, "metadata">;