API Web en .NET 8 para gestionar marcas de automóviles usando Entity Framework Core y PostgreSQL.
- .NET 8
- PostgreSQL con Entity Framework Core
- Docker Compose para desarrollo
- Pruebas unitarias con xUnit
- Swagger para documentación
- .NET 8 SDK (descargar)
- Docker Desktop (opcional, para docker-compose)
- PostgreSQL 15+ (opcional, para desarrollo local)
coderland-backend/
├── src/ApiMarcas/              # API principal
├── tests/ApiMarcas.Tests/       # Pruebas unitarias
├── docker-compose.yml           # Docker Compose
└── Dockerfile                   # Imagen de la API
docker-compose up --buildLa API estará en http://localhost:8080
Abre http://localhost:8080/swagger para ver la documentación, o prueba:
curl http://localhost:8080/api/marcasDeberías ver 3 marcas: Toyota, Ford, BMW.
1. Levantar PostgreSQL (Docker):
docker run --name postgres-dev -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres:152. Configurar variables de entorno:
Linux/Mac:
export POSTGRES_HOST=localhost
export POSTGRES_DB=marcas_autos
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=postgresWindows PowerShell:
$env:POSTGRES_HOST="localhost"
$env:POSTGRES_DB="marcas_autos"
$env:POSTGRES_USER="postgres"
$env:POSTGRES_PASSWORD="postgres"3. Crear migraciones:
cd src/ApiMarcas
dotnet ef migrations add Init4. Ejecutar:
dotnet restore
dotnet build
dotnet runLa API estará en http://localhost:5000 o https://localhost:5001
dotnet testLas pruebas usan InMemory Database, no necesitas PostgreSQL corriendo.
Obtiene todas las marcas de autos.
Respuesta:
[
  {
    "id": 1,
    "nombre": "Toyota",
    "paisOrigen": "Japón"
  },
  {
    "id": 2,
    "nombre": "Ford",
    "paisOrigen": "Estados Unidos"
  },
  {
    "id": 3,
    "nombre": "BMW",
    "paisOrigen": "Alemania"
  }
]Ejemplo:
curl http://localhost:8080/api/marcasCREATE TABLE MarcasAutos (
    Id SERIAL PRIMARY KEY,
    Nombre VARCHAR(255) NOT NULL,
    PaisOrigen VARCHAR(255)
);La app incluye 3 marcas por defecto:
- Toyota (Japón)
- Ford (Estados Unidos)
- BMW (Alemania)
Se aplican automáticamente con Docker. Si usas desarrollo local:
dotnet ef database updateConstruir:
docker-compose buildVer logs:
docker-compose logs -f apiDetener:
docker-compose downLimpiar todo (incluye datos):
docker-compose down -v# Limpiar
dotnet clean
# Listar migraciones
dotnet ef migrations list
# Nueva migración
dotnet ef migrations add NombreMigracion
# Ver SQL de migraciones
dotnet ef migrations script- Las migraciones se aplican automáticamente al iniciar
- Los datos se siembran solo si la tabla está vacía
- Las pruebas usan In-Memory DB (no necesitas Postgres)
- Logger configurado para debugging
Error: "Unable to connect to PostgreSQL"
- Verifica que Postgres esté corriendo
- Revisa credenciales en variables de entorno
- Revisa logs: docker-compose logs
Error: "Migration already applied"
dotnet ef database drop
dotnet ef database updatePuerto 8080 ocupado
Cambia el puerto en docker-compose.yml:
ports:
  - "8081:8080"Después de levantar:
curl http://localhost:8080/api/marcasDeberías ver las 3 marcas en formato JSON.