← Índice de documentación

Guía de desarrollo y pruebas

ArcorTruck BackOffice Web · Docker Compose · SQL Server · API .NET 8 · SPA Vite

Este documento explica cómo desarrollar y probar el proyecto con los contenedores definidos en docker-compose.yml, y cómo conectarte a la base de datos desde tu máquina (fuera de la red interna de Docker). Complementa la guía Docker, la referencia API y el manual de pruebas.

Base del cliente ArcorGev5Reparto: reportes y pantallas deben leer tablas con prefijo E_ (datos validados). Las tablas D_ son descargas móviles, a veces incompletas — no usarlas en la UI. Detalle en base_datos_arcor_gev5.html.

1. Requisitos

Solo entorno de demo. La contraseña sa publicada en este repo no debe usarse en producción ni exponerse en redes no confiables.

2. Arquitectura del stack Docker

Tu navegador / herramientas en el host ┌─────────────────────────────────────────────────────────────┐ │ localhost:3000 ──► contenedor [web] (nginx:80) │ │ │ │ proxy /api/* ───────────────┼──► api:8080 │ │ │ SPA estática (build Vite) │ │ localhost:5000 ──► contenedor [api] (ASP.NET :8080) │ │ │ │ EF Core + migraciones │ │ │ └──────────► db:1433 (red Docker) │ localhost:14333 ──► contenedor [db] (SQL Server 2022) │ └─────────────────────────────────────────────────────────────┘ Dentro de Compose, la API usa Server=db (nombre del servicio). Desde el host, la misma instancia SQL es localhost,14333.
Servicio Compose Imagen / build Puerto host Puerto interno
web src/Web/Dockerfile (Node build + nginx) 3000 80
api src/GoTruckBackoffice.Api/Dockerfile (.NET 8) 5000 8080
db mcr.microsoft.com/mssql/server:2022-latest 14333 1433

3. Desarrollo y pruebas con todo en Docker

3.1 Levantar el entorno

En la raíz del repositorio (donde está docker-compose.yml):

docker compose up -d --build

3.2 URLs para probar

Qué probar URL
Aplicación web (login + menú) http://localhost:3000 → #/login
API vía mismo origen que nginx http://localhost:3000/api/…
API directa (Swagger, curl) http://localhost:5000/swagger
Health (sin JWT) http://localhost:5000/api/health

3.3 Credenciales de la aplicación

Campo Valor
Usuario backoffice admin
Contraseña admin

Tras login, el token JWT se guarda en localStorage (clave gotruck_token).

3.4 Flujo de prueba recomendado (Docker completo)

  1. docker compose ps — los tres servicios en estado running; db healthy.
  2. Abrir http://localhost:3000, iniciar sesión con admin / admin.
  3. Ir a Datos demo (API) en el menú (#/datos-demo) y confirmar tablas con datos sembrados.
  4. En Swagger: POST /api/auth/login → Authorize con Bearer → probar GET /api/catalogs/drivers (ver referencia API).
  5. Revisar logs si algo falla: docker compose logs -f api o db.

3.5 Reconstruir tras cambios de código

Cambiaste… Comando
Solo frontend (src/Web) docker compose up -d --build web
Solo API (src/GoTruckBackoffice.Api) docker compose up -d --build api
Ambos o docker-compose.yml docker compose up -d --build
Migraciones EF nuevas Reconstruir api y reiniciar: docker compose up -d --build api (migran al arranque)

3.6 Comandos útiles

# Estado y puertos
docker compose ps

# Logs en vivo
docker compose logs -f api
docker compose logs -f db

# Reiniciar un servicio
docker compose restart api

# Detener todo
docker compose down
Los datos de SQL viven en el contenedor db (sin volumen nombrado en el compose actual). Un docker compose down seguido de eliminación del contenedor puede borrar la base; la próxima subida vuelve a migrar y sembrar.

4. Desarrollo híbrido (recomendado para iterar rápido)

Mantener solo SQL Server en Docker y correr API + frontend en el host con hot reload.

4.1 Base de datos en Docker, resto local

# Solo SQL Server
docker compose up -d db

# Esperar healthy (o: docker compose ps)
docker compose logs -f db

API (otra terminal):

cd src/GoTruckBackoffice.Api
dotnet run

Web (otra terminal):

cd src/Web
npm install
npm run dev
Componente URL local
SPA (Vite) http://localhost:5173
API http://localhost:5000 (según launchSettings.json)
Proxy Vite → API /api → http://127.0.0.1:5000 (vite.config.ts)

La cadena en src/GoTruckBackoffice.Api/appsettings.json ya apunta a Server=localhost,14333 con la misma contraseña que Docker.

4.2 Cuándo usar cada modo

Modo Ventaja
Todo Docker Replica producción (nginx + API en contenedor); ideal para demo/QA integrado.
Híbrido (db Docker + dev local) Recarga rápida en TypeScript y C# sin rebuild de imágenes.
Solo db Docker + API local Probar migraciones y endpoints sin reconstruir web.

5. Acceso a SQL Server desde fuera de Docker

El puerto 14333 del host se mapea al 1433 del contenedor. Cualquier herramienta en tu PC usa localhost (o 127.0.0.1), no el hostname db (ese nombre solo resuelve dentro de la red Compose).

5.1 Datos de conexión (resumen)

Parámetro Valor (demo)
Servidor / host localhost,14333 o 127.0.0.1,14333
Puerto TCP 14333 (host) → 1433 (contenedor)
Autenticación SQL Server (no Windows en contenedor Linux)
Usuario sa
Contraseña Gotruck_Dev_2024!
Base de datos GotruckDemo (creada por migraciones al arrancar la API)
Cifrado / certificado Aceptar certificado no confiable / TrustServerCertificate=True

5.2 Cadenas de conexión listas para copiar

ADO.NET / appsettings (desde el host):

Server=localhost,14333;Database=GotruckDemo;User Id=sa;Password=Gotruck_Dev_2024!;TrustServerCertificate=True;MultipleActiveResultSets=true

JDBC (DBeaver, etc.):

jdbc:sqlserver://localhost:14333;databaseName=GotruckDemo;encrypt=true;trustServerCertificate=true

Azure Data Studio / SSMS:

5.3 Probar con sqlcmd desde el host (Windows)

Si tenés sqlcmd instalado (p. ej. con SQL Server tools):

sqlcmd -S localhost,14333 -U sa -P "Gotruck_Dev_2024!" -C -Q "SELECT name FROM sys.databases"

Consultar tablas de la demo:

sqlcmd -S localhost,14333 -U sa -P "Gotruck_Dev_2024!" -C -d GotruckDemo -Q "SELECT Codigo, Nombre FROM Repartidores"

Alternativa sin sqlcmd en el host: ejecutar dentro del contenedor
docker compose exec db /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P 'Gotruck_Dev_2024!' -C -d GotruckDemo -Q "SELECT 1"

5.4 Esquema y tablas relevantes

Tras la primera migración exitosa de la API:

Tabla Contenido
Usuarios Login backoffice (incluye admin con hash BCrypt)
Repartidores 3 filas de demo (semilla EF)
Clientes 4 clientes de ejemplo
HojasReparto 3 hojas con métricas de visitas/entregas/montos
__EFMigrationsHistory Historial de migraciones aplicadas

Ejemplo para listar usuarios (solo desarrollo):

SELECT Id, NombreUsuario, CreadoEnUtc FROM Usuarios;

5.5 Diferencia: dentro vs fuera de Docker

Origen de la conexión Servidor en la cadena
Contenedor api Server=db;… (variable en docker-compose.yml)
dotnet run en tu PC Server=localhost,14333;… (appsettings.json)
DBeaver / SSMS / sqlcmd en tu PC localhost,14333

6. Probar la API con autenticación (curl)

# Login
curl -s -X POST http://localhost:5000/api/auth/login ^
  -H "Content-Type: application/json" ^
  -d "{\"usuario\":\"admin\",\"clave\":\"admin\"}"

# Copiar el token de la respuesta y usarlo:
curl -s http://localhost:5000/api/dashboard/summary ^
  -H "Authorization: Bearer <TOKEN>"

En PowerShell podés usar Invoke-RestMethod con el mismo cuerpo JSON.


7. Solución de problemas

Síntoma Acción
db no pasa a healthy Más RAM; en Apple Silicon probar platform: linux/amd64 en el servicio db; ver docker compose logs db.
API no conecta a SQL Esperar healthy; docker compose restart api; revisar cadena en logs.
No puedo conectar desde DBeaver al host Verificar que el contenedor expone 0.0.0.0:14333; firewall Windows; TrustServerCertificate.
Build de web falla en Docker Errores TypeScript: corregir y docker compose build web; localmente npm run build en src/Web.
401 en datos tras login Token expirado o JWT mal configurado; re-login; revisar sección Jwt en appsettings.json.
Puerto en uso Cambiar mapeo en docker-compose.yml (p. ej. 5001:8080) y ajustar proxy Vite si desarrollás en local.

8. Archivos de referencia en el repo

Archivo Rol
docker-compose.yml Servicios, puertos, variables de entorno de la API
src/GoTruckBackoffice.Api/appsettings.json Conexión SQL desde host + JWT demo
src/Web/nginx.conf Proxy /api → contenedor api:8080
src/Web/vite.config.ts Proxy dev /api → 127.0.0.1:5000
src/GoTruckBackoffice.Api/Data/AppDbContext.cs Semilla de datos demo