Descripción profesional y guía de uso del proyecto GimnasioApi.
GimnasioApi es una API RESTful construida con ASP.NET Core 8 y Entity Framework Core para la gestión de los recursos principales de un gimnasio (miembros, clases, instructores y asistencias). Está diseñada con una arquitectura en capas para facilitar la mantenibilidad, las pruebas y la evolución.
- Proveer un backend escalable y fácil de extender para operaciones CRUD.
- Aplicar buenas prácticas: separación de responsabilidades, DTOs, validaciones y manejo de errores centralizado.
- Facilitar despliegue y operaciones mediante migraciones EF Core y configuración mediante
appsettings.json.
- Framework:
ASP.NET Core 8(.NET 8) - ORM:
Entity Framework Core - Base de datos:
SQL Server - Lenguaje:
C# 12 - Migraciones:
dotnet ef
Controllers/— Endpoints HTTP (controladores por recurso).Services/— Lógica de negocio y orquestación entre capa API y persistencia.DTOs/— Objetos de transferencia que definen contratos públicos de la API.Models/— Entidades de dominio y mapeo a BD.GimnasioDbContext.cs—DbContextde EF Core.Migrations/— Migraciones generadas por EF Core.Program.cs— Configuración de la aplicación e inyección de dependencias.appsettings.json— Configuración, incluida la cadena de conexión.
- Controladores: validar modelos de entrada (
[ApiController]+ validación automática), mapear a DTOs y devolver respuestas HTTP adecuadas. - Servicios: aplicar reglas de negocio, validaciones adicionales (existencia de relaciones, unicidad), y acceso directo a
GimnasioDbContext. - DbContext/Models: definir el modelo relacional y administrar transacciones mediante EF Core.
Base: /api
GET /api/miembros— Listar todos los miembros.GET /api/miembros/{id}— Obtener miembro por id.POST /api/miembros— Crear miembro.PUT /api/miembros/{id}— Actualizar miembro.DELETE /api/miembros/{id}— Eliminar miembro.
(Analogía: existen controladores para clases, instructores, asistencias y autenticación según la implementación del proyecto.)
Ejemplos en DTOs/:
MiembroForCreationDTO,MiembroForUpdateDTO,MiembroDTO— contratan entradas y salidas paraMiembro.ClaseCreacionDTO— contiene[Required],[StringLength(50)]paraNombreClase,[Range(1,99)]paraCapacidadyInstructorIdrequerido.
Se recomienda mantener las validaciones de atributos y complementar con validaciones de negocio en los servicios (p. ej. verificar que InstructorId exista antes de crear una Clase).
-
Clonar el repositorio:
git clone <URL_PROYECTO> cd GimnasioApi
-
Configurar la cadena de conexión en
appsettings.json(usar secretos / variables de entorno en producción):"ConnectionStrings": { "DefaultConnection": "Server=TU_SERVIDOR;Database=GimnasioDb;User Id=USUARIO;Password=CONTRASEÑA;TrustServerCertificate=True;" }
-
Crear / actualizar la base de datos con migraciones:
dotnet ef database update
-
Ejecutar la aplicación:
dotnet run
Por defecto la API estará en https://localhost:5001 o http://localhost:5000 salvo configuración distinta.
-
Añadir una migración:
dotnet ef migrations add NombreDeLaMigracion
-
Aplicar migraciones:
dotnet ef database update
Asegúrate de que la DefaultConnection esté correctamente configurada antes de aplicar migraciones.
Crear miembro (POST /api/miembros):
{
"nombre": "Juan Pérez",
"email": "juan.perez@example.com"
}Respuesta exitosa (201 Created) con la entidad creada o ubicación en el header Location.
Crear clase (POST /api/clases) usando ClaseCreacionDTO:
{
"nombreClase": "Yoga Básico",
"capacidad": 20,
"instructorId": 2
}400 Bad Request— solicitudes con validaciones fallidas (model binding / atributos de validación).404 Not Found— recurso no existe.201 Created— creación exitosa.200 OK— respuestas exitosas con payload.500 Internal Server Error— errores no controlados (registrar y ocultar detalles en producción).