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; estadoscreated,pending_payment,paid,cancelled,rejectedyexpired.PurchaseItem: snapshot del producto o variante, cantidad, precio y total al comprar.TelepagosQryTelepagosPayment: 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.CatalogSelectionResolveryPurchaseItemSnapshotFactory: 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.