- Create TicketValiditySchemaTest to verify database schema for ticket validity. - Update CatalogModelsTest to include tests for event date attributes and selection options. - Introduce EventDateTextFormatterTest for formatting event dates in Spanish. - Refactor EventModelsTest to include validity time relationships. - Add SaleDetailResourceTest to ensure correct serialization of purchase items. - Enhance TicketTest with validity time checks and status management. - Implement ValidityTimeResourceTest to validate resource output for different validity types. - Add ValidityTimeTest to verify casting and validity checks for validity time types.
34 lines
1.8 KiB
Markdown
34 lines
1.8 KiB
Markdown
# Dominio Purchase
|
|
|
|
## Propósito
|
|
|
|
Implementa el ciclo de compra y checkout: crea una compra desde el carrito, toma una instantánea de sus ítems, reserva inventario, permite ediciones, inicia el pago y confirma, cancela o vence la operación.
|
|
|
|
## Modelo
|
|
|
|
- `Purchase`: raíz de la compra; estados `created`, `pending_payment`, `paid`, `cancelled`, `rejected` y `expired`.
|
|
- `PurchaseItem`: snapshot del producto o variante, cantidad, precio y total al comprar.
|
|
- `TelepagosQr` y `TelepagosPayment`: datos del QR e intentos/resultados del proveedor.
|
|
- `PurchasePaid`: evento emitido una sola vez al pasar a pagada bajo bloqueo transaccional.
|
|
|
|
## Servicios de checkout
|
|
|
|
`CheckoutService` es la fachada estable. Delega en:
|
|
|
|
- `StartCheckoutService`: inicia la compra desde el carrito.
|
|
- `EditCheckoutService`: modifica cliente o cantidades antes del cierre.
|
|
- `CompleteCheckoutService`: completa, envía a revisión o confirma el pago.
|
|
- `ReleaseCheckoutService`: cancela, vence y procesa vencimientos pendientes.
|
|
- `SourceCartService`: sincroniza, restaura o finaliza el carrito fuente.
|
|
- `CatalogSelectionResolver` y `PurchaseItemSnapshotFactory`: resuelven selecciones y generan snapshots.
|
|
|
|
`UserPurchaseLimitService` controla límites de compra y `CheckoutService` conserva el punto de entrada para controladores e integraciones.
|
|
|
|
## Endpoints
|
|
|
|
Bajo `/tenants/{tenant:codigo}/compras`, con `auth:sanctum`: listado, inicio, detalle, edición de ítems, datos del cliente, intención de pago, finalización, revisión y cancelación.
|
|
|
|
## Dependencias y reglas
|
|
|
|
Depende de `Cart`, `Catalog`, `Tenant`, `Auth` e `Integration`; emite eventos consumidos por `Ticket` y `Notification`. Los cambios de estado e inventario deben ser transaccionales y usar los servicios del checkout, no actualizaciones directas del modelo.
|