OrderSvc
El Servicio de Pedidos (OrderSvc) es responsable de gestionar todo el ciclo de vida de los pedidos, desde la creación hasta la entrega, incluyendo integración con pagos e inventario.
Responsabilidades Principales
OrderSvc es responsable de:
- Gestión de Pedidos: Creación, seguimiento y compleción de pedidos
- Procesamiento de Pagos: Integración con pasarelas de pago
- Gestión de Inventario: Verificación y reserva de existencias
- Cálculo de Precios: Aplicación de descuentos y promociones
- Notificaciones: Actualización del estado de pedidos
Arquitectura
El servicio implementa una arquitectura hexagonal con CQRS:
Modelo de Datos
Entidades principales:
Entidad | Descripción |
---|---|
Pedido | Información principal del pedido |
LineaPedido | Productos individuales del pedido |
Cliente | Datos del cliente que realiza el pedido |
Pago | Información de pagos asociados |
Envío | Detalles de envío y entrega |
Transacción | Registro de transacciones financieras |
Implementación CQRS
Comandos
CrearPedido
: Inicializar un nuevo pedidoAgregarProductoAPedido
: Añadir producto al pedidoAplicarDescuento
: Aplicar código promocionalProcesarPago
: Procesar pago del pedidoCancelarPedido
: Cancelar un pedidoMarcarPedidoComoEnviado
: Actualizar estado a enviado
Consultas
ObtenerPedidoPorId
: Consultar pedido por IDListarPedidosDeCliente
: Obtener pedidos de un clienteObtenerHistorialDePedidos
: Historial de pedidos con filtrosObtenerEstadísticasPedidos
: Métricas de pedidosVerificarEstadoPago
: Consultar estado de pago
Flujo de Trabajo de Pedidos
- Creación: Cliente crea pedido con productos
- Validación: Verificación de disponibilidad y precios
- Pago: Procesamiento del pago
- Confirmación: Generación de confirmación y número de pedido
- Preparación: Reserva de inventario
- Envío: Gestión logística y actualización de estado
- Entrega: Confirmación de entrega y cierre
Endpoints API
Gestión de Pedidos
POST /api/orders
: Crear nuevo pedidoGET /api/orders
: Listar pedidos (con filtros)GET /api/orders/{id}
: Obtener detalles de pedidoPUT /api/orders/{id}/status
: Actualizar estado de pedidoDELETE /api/orders/{id}
: Cancelar pedido
Líneas de Pedido
POST /api/orders/{id}/items
: Añadir producto a pedidoDELETE /api/orders/{id}/items/{itemId}
: Eliminar producto de pedidoPUT /api/orders/{id}/items/{itemId}/quantity
: Modificar cantidad
Pagos
POST /api/orders/{id}/payments
: Registrar pagoGET /api/orders/{id}/payments
: Ver historial de pagosGET /api/orders/{id}/payments/status
: Verificar estado de pago
Eventos Publicados
El servicio publica los siguientes eventos en RabbitMQ:
PedidoCreado
: Cuando se crea un nuevo pedidoPedidoActualizado
: Cuando se modifica un pedidoPedidoConfirmado
: Cuando se confirma un pedidoPedidoCancelado
: Cuando se cancela un pedidoPagoRecibido
: Cuando se procesa un pago exitosoPedidoEnviado
: Cuando el pedido sale para entregaPedidoEntregado
: Cuando se confirma la entrega al cliente
Eventos Consumidos
El servicio escucha los siguientes eventos:
InventarioActualizado
(ProductSvc): Actualiza disponibilidad de productosPagoConfirmado
(PaymentSvc): Procesa confirmación de pagoPagoRechazado
(PaymentSvc): Maneja pagos fallidosClienteActualizado
(UserSvc): Actualiza datos de clientes
Integración con Otros Servicios
- ProductSvc: Verificación de disponibilidad y precios
- PaymentSvc: Procesamiento y verificación de pagos
- UserSvc: Validación de clientes y direcciones
- NotificationSvc: Envío de notificaciones sobre estado de pedidos
Tecnologías Utilizadas
- .NET 10: Framework base
- PostgreSQL: Base de datos principal
- Dapper: Micro ORM para acceso a datos
- RabbitMQ: Mensajería para eventos
- Redis: Caché para mejorar rendimiento
- Polly: Gestión de reintentos y circuit breaker
Patrones de Resiliencia
- Circuit Breaker: Para servicios externos
- Reintentos con Backoff: Para operaciones transitorias
- Bulkhead: Aislamiento de fallos
- Timeout: Limitación de tiempo para operaciones
- Saga: Para transacciones distribuidas en el flujo de pedidos
Despliegue
- Despliegue directo en servidores dedicados
- Alta disponibilidad: múltiples instancias
- Copias de seguridad diarias
- Actualizaciones Blue/Green para minimizar tiempo de inactividad
Monitoreo
- Seguimiento detallado de cada pedido
- Métricas de rendimiento por etapa
- Alertas para errores en pagos o inventario
- Dashboards de ventas y tiempos de procesamiento