- 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.3 KiB
Markdown
34 lines
1.3 KiB
Markdown
# Dominio Ticket
|
|
|
|
## Propósito
|
|
|
|
Genera, valida, consulta y exporta entradas asociadas a compras pagadas de productos o variantes ticketables.
|
|
|
|
## Modelo
|
|
|
|
- `Ticket`: pertenece a tenant y usuario, conserva referencias a compra, producto, variante, validez y usuario escáner.
|
|
- `ValidityTime`: define ventanas absolutas o relativas de vigencia para productos, opciones y tickets.
|
|
- `ValidityTimeType`: enum de estrategias de vigencia.
|
|
|
|
El modelo calcula si un ticket está vigente, vencido o usado, y resuelve sus fechas efectivas de inicio y fin.
|
|
|
|
## Flujo de generación
|
|
|
|
1. `Purchase` emite `PurchasePaid` al confirmarse el pago.
|
|
2. `GenerateTicketsForPaidPurchase` atiende el evento.
|
|
3. `TicketGeneratorService` crea los tickets requeridos según ítems, cantidades y vigencia.
|
|
4. El flujo puede emitir disponibilidad para que `Notification` informe al comprador.
|
|
|
|
## Endpoints
|
|
|
|
Bajo `/tenants/{tenant:codigo}`, protegidos por `auth:sanctum`:
|
|
|
|
- `GET /tickets`.
|
|
- `POST /tickets/pdf`.
|
|
|
|
`TicketPdfService` genera la descarga y `TicketResource`/`ValidityTimeResource` definen las respuestas.
|
|
|
|
## Dependencias y reglas
|
|
|
|
Depende de `Purchase`, `Catalog`, `Tenant` y `Auth`. La generación debe ser idempotente ante reintentos del evento. `TicketNotAvailableException` y `TicketGenerationException` separan indisponibilidad de errores de generación.
|