API de dominio para gestión de pedidos con estados PENDIENTE, APROBADO, PAGADO, CANCELADO.
Este servicio:
- expone endpoints REST de negocio,
- persiste pedidos/eventos/idempotencia en PostgreSQL,
- inicia proceso BPMN vía
camunda-gateway-api(síncrono en creación), - publica transiciones de estado (
aprobar/pagar/cancelar) usando Outbox + publicación asíncrona.
pedido-api-bpmn: dominio de negocio + persistencia + outbox publisher.camunda-gateway-api: integración con Camunda 8 (start process + correlate message + workers).
Flujo general:
POST /api/pedidoscrea pedido y arranca instancia BPMN (retornaprocessInstanceKeyyprocessDefinitionKey).POST /api/pedidos/{id}/aprobar|pagar|cancelarcambia estado y encola evento outbox.- Worker de outbox publica al gateway y marca evento
PROCESSED/FAILED.
- Java 21
- PostgreSQL
- Camunda 8 (Zeebe + Operate)
camunda-gateway-apien ejecución
DB_URL(default:jdbc:postgresql://localhost:5534/ventas_db)DB_USERNAME(default:postgres17)DB_PASSWORD(default:123)
JWT_ISSUER_URIJWT_RESOURCE_CLIENT_ID
ORCHESTRATION_BASE_URL(default:http://localhost:4333)INTERNAL_API_TOKEN(debe coincidir con el gateway)INTERNAL_TOKEN_HEADER(default:X-Internal-Token)
ORCHESTRATION_CONNECT_TIMEOUT_MS(default:3000)ORCHESTRATION_READ_TIMEOUT_MS(default:5000)ORCHESTRATION_RETRY_MAX_ATTEMPTS(default:2)ORCHESTRATION_RETRY_PERIOD_MS(default:200)ORCHESTRATION_RETRY_MAX_PERIOD_MS(default:1000)
./gradlew bootRunBase URL: http://localhost:4222
curl --location 'http://localhost:4222/api/pedidos' \
--header 'Content-Type: application/json' \
--data '{
"cliente": "Mateo",
"monto": 150
}'curl --location --request POST 'http://localhost:4222/api/pedidos/1/aprobar' \
--header 'Idempotency-Key: key-aprobar-1'curl --location --request POST 'http://localhost:4222/api/pedidos/1/pagar' \
--header 'Idempotency-Key: key-pagar-1'curl --location --request POST 'http://localhost:4222/api/pedidos/1/cancelar' \
--header 'Idempotency-Key: key-cancelar-1'curl --location 'http://localhost:4222/api/pedidos/1'- Actuator:
/actuator/health,/actuator/info,/actuator/metrics,/actuator/prometheus - Métricas de outbox/transiciones con Micrometer.
- Logs estructurados en formato ECS.
- Inicio -> espera
pedido-aprobadoopedido-cancelado. - Si aprueba -> espera
pedido-pagadoopedido-cancelado. - Finaliza en tarea
notificar-pedido-finalizadoy luegoFin pagadooFin cancelado.


