🐳 docker-labs GitHub ↗

Inventory Core Plataforma

Backend transaccional para clientes, productos y pedidos con PostgreSQL.

Objetivo: Resolver el nucleo transaccional del repositorio con clientes, productos, pedidos y stock.

Rol en la plataforma
Core transaccional
Stack
Python 3.12 + FastAPI + PostgreSQL
Puertos del host
8000 5432
Memoria recomendada
3 GB
Categoría
Plataforma
Entradas
Sistema: http://localhost:8000
Swagger: http://localhost:8000/docs
Health check
http://localhost:8000/health
Labs relacionados
Operations Portal · Platform Gateway

Qué hacer una vez levantado

docker compose -f 05-postgres-api/docker-compose.yml up -d --build

05-postgres-api — Inventory Core#

Versión: 1.5.0 Estado: 🟢 Operativo Audiencia: 👥 Backend, full stack, reclutadores Rol en la plataforma: Core transaccional del workspace

Inventory Core es un servicio transaccional construido con FastAPI y PostgreSQL para gestionar clientes, productos y pedidos. Dentro de docker-labs, este laboratorio existe para demostrar cuándo una base relacional aporta valor real: integridad, consistencia, consultas estructuradas y operaciones de negocio que no conviene resolver con un backend trivial.

🎯 Propósito#

Este lab representa el núcleo de un sistema comercial pequeño o mediano:

DominioQué resuelve
CatálogoProductos con stock y SKU
ClientesCartera con datos de contacto
PedidosRegistro y seguimiento por cliente
InventarioControl básico de stock disponible
ResumenVista operativa para dashboards

En el ecosistema del repositorio, este servicio puede evolucionar en un core-service para CRM, inventario o pedidos.

🤔 Por qué existe este servicio#

Se construyó porque PostgreSQL tiene sentido cuando necesitas:

La existencia de este laboratorio se justifica porque muestra un caso donde Docker encapsula un backend de negocio real, no solo un ejemplo académico.

📦 Sistema entregado#

ComponenteDetalle
APIFastAPI documentada en Swagger
Base de datosPostgreSQL 15 con volumen persistente
Seed inicialClientes y productos precargados
SaludEndpoints /health y /ready
ObservabilidadEndpoints /summary, /insights y /metrics
DespliegueDocker Compose local
InfraestructuraManifiestos base para Kubernetes

🗂️ Modelo de dominio#

Customer 1 --- N Order 1 --- N OrderLine N --- 1 Product

⚡ Inicio rápido#

cd 05-postgres-api
docker compose up -d --build

Accesos:

RecursoURL
APIhttp://localhost:8000
Swagger UIhttp://localhost:8000/docs
OpenAPI JSONhttp://localhost:8000/openapi.json
PostgreSQLlocalhost:5432

⚙️ Configuración#

Archivo base: .env.example

POSTGRES_DB=inventory
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/inventory

📋 Contrato de API#

Sistema#

MétodoEndpointDescripción
GET/Portada del servicio
GET/healthLiveness check
GET/readyReadiness check
GET/summaryResumen operativo
GET/insightsAnalitica operativa, top clientes, top productos y reposicion sugerida
GET/metricsMetricas Prometheus del core

Clientes#

MétodoEndpoint
POST/customers
GET/customers
{
  "name": "Contoso Retail",
  "email": "ops@contoso.example.com"
}

Productos#

MétodoEndpoint
POST/products
GET/products
GET/products?low_stock_only=true
{
  "sku": "KB-ERG-01",
  "name": "Teclado ergonómico",
  "description": "Periférico para estaciones de trabajo",
  "price": 79.90,
  "stock": 18
}

Pedidos#

MétodoEndpoint
POST/orders
GET/orders
PATCH/orders/{order_id}
{
  "customer_id": 1,
  "status": "draft",
  "items": [
    { "product_id": 1, "quantity": 2 },
    { "product_id": 2, "quantity": 1 }
  ]
}
status es opcional. Si no se envia, el pedido nace como confirmed. Tambien se puede crear como draft y confirmarlo despues con PATCH.

✅ Verificación#

docker compose ps
curl http://localhost:8000/health
curl http://localhost:8000/ready
curl http://localhost:8000/summary
curl http://localhost:8000/insights
curl http://localhost:8000/metrics

Flujo mínimo:

curl -X POST http://localhost:8000/customers \
  -H "Content-Type: application/json" \
  -d "{\"name\":\"Demo Corp\",\"email\":\"demo@corp.example.com\"}"

☸️ Kubernetes#

cd 05-postgres-api/k8s
kubectl apply -f deployment.yaml
kubectl port-forward svc/postgres-api-service 8000:8000

🧠 Decisiones de diseño#

DecisiónJustificación
FastAPIValidación y documentación automática
PostgreSQLConsistencia transaccional y modelo relacional
SQLAlchemyPersistencia suficientemente expresiva para el lab
Seed inicialEntorno útil desde el primer arranque
Readiness endpointDiferencia proceso vivo de dependencia lista

🚧 Alcance actual#

Este laboratorio está listo para desarrollo local, demos técnicas y aprendizaje estructurado. Aún no incorpora autenticación, migraciones versionadas, pruebas automatizadas de contrato ni observabilidad avanzada.

📚 Documentos relacionados#