Files
shopit-back/app/Domains/Purchase/documentacion

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.