RESTful API para gestión de personas y direcciones desarrollada con VB.NET, ASP.NET Core 8.0, Entity Framework Core y SQL Server.
- ✅ Arquitectura en Capas (Clean Architecture)
- API Layer (Controllers, Middleware)
- Business Layer (Services, Validators, DTOs)
- Data Layer (EF Core, Repositories)
- ✅ Entity Framework Core con SQL Server
- ✅ Repository Pattern para abstracción de datos
- ✅ FluentValidation para validación de datos
- ✅ Global Exception Handling con middleware personalizado
- ✅ Swagger/OpenAPI para documentación interactiva
- ✅ Health Checks para monitoreo
- ✅ CORS configurado para integración con frontend
- ✅ Paginación y búsqueda en listados
- ✅ Operaciones CRUD completas
- .NET 8.0 SDK
- SQL Server (LocalDB, Express, o superior)
- Visual Studio 2022 o Visual Studio Code
PersonasSolution/
├── Database/ # Scripts SQL de base de datos
│ ├── CreateDatabase.sql # Script de creación de BD
│ └── SeedData.sql # Datos de prueba
├── Personas.Api/ # Capa de presentación (API REST)
│ ├── Controllers/ # Controladores de API
│ ├── Middleware/ # Middleware personalizado
│ ├── Extensions/ # Extensiones de configuración
│ └── Models/ # Modelos de respuesta
├── Personas.Business/ # Capa de negocio
│ ├── Services/ # Lógica de negocio
│ ├── Validators/ # Validadores FluentValidation
│ └── DTOs/ # Data Transfer Objects
├── Personas.Repository/ # Capa de acceso a datos
│ └── Repositories/ # Implementación de repositorios
└── Personas.EF/ # Capa de Entity Framework
├── Entities/ # Entidades del dominio
└── DbContext/ # Contexto de base de datos
git clone https://github.com/full-stack-dev-johncastrosanabria/PersonasSolution.git
cd PersonasSolutionEste proyecto utiliza un enfoque Database-First. Ejecuta el script SQL para crear la base de datos:
Opción A: SQL Server Management Studio (SSMS)
- Abre SSMS y conéctate a tu instancia de SQL Server
- Abre el archivo
Database/CreateDatabase.sql - Ejecuta el script (F5)
- (Opcional) Ejecuta
Database/SeedData.sqlpara datos de prueba
Opción B: Línea de comandos
sqlcmd -S localhost -i Database/CreateDatabase.sql
sqlcmd -S localhost -d PersonasDb -i Database/SeedData.sqlEditar Personas.Api/appsettings.json según tu configuración de SQL Server:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=PersonasDb;Trusted_Connection=True;TrustServerCertificate=True;"
}
}Nota: Si usas autenticación SQL Server en lugar de Windows Authentication:
"DefaultConnection": "Server=localhost;Database=PersonasDb;User Id=tu_usuario;Password=tu_contraseña;TrustServerCertificate=True;"cd Personas.Api
dotnet runLa API estará disponible en:
- HTTP:
http://localhost:5000 - HTTPS:
https://localhost:5001 - Swagger UI:
http://localhost:5000(raíz)
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/personas?search=&page=1&pageSize=10 |
Obtener lista paginada de personas |
| GET | /api/personas/{id} |
Obtener persona por ID |
| POST | /api/personas |
Crear nueva persona |
| PUT | /api/personas/{id} |
Actualizar persona |
| PATCH | /api/personas/{id}/activo |
Activar/desactivar persona |
| POST | /api/personas/{id}/direcciones |
Agregar dirección a persona |
| Método | Endpoint | Descripción |
|---|---|---|
| PUT | /api/direcciones/{id} |
Actualizar dirección |
| DELETE | /api/direcciones/{id} |
Eliminar dirección |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /health |
Estado de salud de la API y base de datos |
POST /api/personas
Content-Type: application/json
{
"identificacion": "123456789",
"nombre": "Juan",
"apellidos": "Pérez García",
"fechaNacimiento": "1990-05-15",
"correo": "juan.perez@example.com",
"telefono": "88887777",
"activo": true
}GET /api/personas?search=juan&page=1&pageSize=10POST /api/personas/1/direcciones
Content-Type: application/json
{
"provincia": "San José",
"canton": "Central",
"distrito": "Carmen",
"direccionExacta": "Avenida Central, Calle 5",
"esPrincipal": true
}La API utiliza FluentValidation para validar los datos de entrada:
- ✅ Identificación: requerida, máximo 50 caracteres
- ✅ Nombre: requerido, máximo 100 caracteres
- ✅ Apellidos: requeridos, máximo 150 caracteres
- ✅ Fecha de nacimiento: requerida, debe ser anterior a hoy
- ✅ Correo: requerido, formato válido, máximo 150 caracteres
- ✅ Teléfono: opcional, máximo 50 caracteres
- ✅ Provincia: requerida, máximo 100 caracteres
- ✅ Cantón: requerido, máximo 100 caracteres
- ✅ Distrito: requerido, máximo 100 caracteres
- ✅ Dirección exacta: requerida, máximo 250 caracteres
La API implementa un middleware global de manejo de excepciones que retorna respuestas consistentes:
{
"statusCode": 404,
"message": "Persona no encontrada.",
"timestamp": "2026-04-24T10:30:00Z"
}# Ejecutar pruebas unitarias (cuando estén disponibles)
dotnet test- Microsoft.AspNetCore.App (8.0)
- Microsoft.EntityFrameworkCore.SqlServer (8.0)
- FluentValidation.AspNetCore (11.3.0)
- Swashbuckle.AspNetCore (6.5.0)
- AspNetCore.HealthChecks.SqlServer (8.0.0)
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Este proyecto está bajo la Licencia MIT.
John Castro Sanabria
- GitHub: @full-stack-dev-johncastrosanabria
- Email: castrosanabriajohn@gmail.com
- ASP.NET Core Team
- Entity Framework Core Team
- FluentValidation Community
⭐ Si este proyecto te fue útil, considera darle una estrella en GitHub!