# Send an invoice for processing
curl -X POST http://localhost:7777/api/facturas/enviar \
-H "Content-Type: application/json" \
-d '{"transaccion_id": "4671b0e9-adae-4de9-86c5-e384616626d6", "estado": "PENDIENTE", "numero_factura": "F001-02413224482"}'

# Query invoice status
curl -X GET http://localhost:7777/api/facturas/4671b0e9-adae-4de9-86c5-e384616626d6

# Revert an invoice
curl -X POST http://localhost:7777/api/facturas/revertir \
-H "Content-Type: application/json" \
-d '{"transaccion_id": "4671b0e9-adae-4de9-86c5-e384616626d6", "numero_factura": "F001-02413224482"}'

# Reprocess DLQ messages
curl -X POST http://localhost:7777/api/dlq/reprocesar


# topic
# Entra al contenedor de kafka
docker exec -it <kafka_container_id> bash

# Una vez dentro, crea los topics
kafka-topics.sh --create --bootstrap-server localhost:9093 --topic FACTURACION --partitions 1 --replication-factor 1

kafka-topics.sh --create --bootstrap-server localhost:9093 --topic FACTURACION_RESULTADOS --partitions 1 --replication-factor 1

kafka-topics.sh --create --bootstrap-server localhost:9093 --topic FACTURACION_DLQ --partitions 1 --replication-factor 1

# FACTURACION
docker exec facturacion_redis_kafka-kafka-1 kafka-topics --create --bootstrap-server localhost:9093 --topic FACTURACION --partitions 1 --replication-factor 1

# FACTURACION_RESULTADOS
docker exec facturacion_redis_kafka-kafka-1 kafka-topics --create --bootstrap-server localhost:9093 --topic FACTURACION_RESULTADOS --partitions 1 --replication-factor 1

# FACTURACION_DLQ
docker exec facturacion_redis_kafka-kafka-1 kafka-topics --create --bootstrap-server localhost:9093 --topic FACTURACION_DLQ --partitions 1 --replication-factor 1


# CONSTRUIR EJECUTABLE
# Compilar el código
go build -o consumer-service cmd/consumer/main.go
go build -o producer-service cmd/producer/main.go

# para compilar en linux desde windows
env GOOS=linux GOARCH=amd64 go build -o consumer-service cmd/consumer/main.go
env GOOS=linux GOARCH=amd64 go build -o producer-service cmd/producer/main.go

# Ejecutar el servicio
./producer-service
./consumer-service

# proyecto-consumer
consumer/
├── cmd/
│   └── server/
│       └── main.go                # Punto de entrada de la aplicación
├── internal/
│   ├── api/
│   │   ├── handlers/
│   │   │   ├── factura.go         # Handlers de facturación
│   │   │   ├── dlq.go             # Handlers de DLQ
│   │   │   └── middleware.go      # Middlewares
│   │   ├── router.go              # Configuración de rutas
│   │   └── server.go              # Configuración del servidor HTTP
│   ├── config/
│   │   └── config.go              # Gestión de configuración
│   ├── domain/
│   │   └── models/
│   │       ├── factura.go         # Modelos de dominio
│   │       ├── response.go        # Estructuras de respuesta
│   │       └── error.go           # Errores de dominio
│   ├── infrastructure/
│   │   ├── database/
│   │   │   ├── postgres.go        # Cliente de base de datos
│   │   │   └── repositories/
│   │   │       ├── factura.go     # Repositorio de facturas
│   │   │       └── dlq.go         # Repositorio DLQ
│   │   ├── kafka/
│   │   │   └── client.go          # Cliente Kafka
│   │   └── logger/
│   │       └── logger.go          # Sistema de logs
│   └── services/
│       ├── factura_service.go     # Lógica de negocio
│       └── dlq_service.go         # Servicios DLQ
├── pkg/
│   ├── env/
│   │   └── env.go                 # Utilidades para variables de entorno
│   └── utils/
│       └── utils.go               # Utilidades generales
├── .env.example                   # Ejemplo de configuración
├── go.mod                         # Dependencias del proyecto
├── go.sum                         # Verificación de dependencias
└── README.md                      # Documentación

# CREAR carpetas-archivos
mkdir -p consumer/cmd/server \
consumer/internal/api/handlers \
consumer/internal/config \
consumer/internal/domain/models \
consumer/internal/infrastructure/database/repositories \
consumer/internal/infrastructure/kafka \
consumer/internal/infrastructure/logger \
consumer/internal/services \
consumer/pkg/env \
consumer/pkg/utils && \
touch consumer/cmd/server/main.go \
consumer/internal/api/handlers/factura.go \
consumer/internal/api/handlers/dlq.go \
consumer/internal/api/handlers/middleware.go \
consumer/internal/api/router.go \
consumer/internal/api/server.go \
consumer/internal/config/config.go \
consumer/internal/domain/models/factura.go \
consumer/internal/domain/models/response.go \
consumer/internal/domain/models/error.go \
consumer/internal/infrastructure/database/postgres.go \
consumer/internal/infrastructure/database/repositories/factura.go \
consumer/internal/infrastructure/database/repositories/dlq.go \
consumer/internal/infrastructure/kafka/client.go \
consumer/internal/infrastructure/logger/logger.go \
consumer/internal/services/factura_service.go \
consumer/internal/services/dlq_service.go \
consumer/pkg/env/env.go \
consumer/pkg/utils/utils.go \
consumer/.env.example \
consumer/go.mod \
consumer/go.sum \
consumer/README.md
