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