Este proyecto es un sistema de gestión académica desarrollado como Trabajo Práctico Final. La aplicación permite administrar las entidades centrales de una institución educativa, como alumnos, docentes, planes de estudio, especialidades, materias y cursos.
La arquitectura del sistema está diseñada siguiendo los principios de Clean Architecture, con un fuerte enfoque en el Diseño Guiado por el Dominio (DDD), la separación de responsabilidades y la mantenibilidad a largo plazo.
El sistema se compone de dos partes principales:
- Una API RESTful robusta construida con ASP.NET Core que sirve como backend y única fuente de verdad.
- Una Aplicación de Escritorio desarrollada en Windows Forms que consume la API para la interacción con el usuario.
- Características Principales
- Diseño de la Arquitectura
- Pila Tecnológica
- Cómo Empezar
- Documentación de la API
- Estructura del Proyecto
- Autor
- Gestión de Entidades (CRUD):
- Administración completa de Personas, Usuarios (Alumnos, Docentes, Administradores), Especialidades, Planes, Materias, Comisiones y Cursos.
- Lógica de Negocio Compleja:
- Inscripción de alumnos a cursos con validaciones (reinscripción, etc.).
- Asignación de docentes a cursos.
- Asociación de materias y comisiones a planes de estudio.
- Baja Lógica (Soft Delete):
- Ningún dato se elimina físicamente. Las entidades se marcan como "borradas" y se excluyen automáticamente de todas las consultas, preservando la integridad histórica y permitiendo la auditoría.
- Seguridad:
- Autenticación de usuarios por legajo.
- Hashing de contraseñas utilizando BCrypt.
- Herencia y Polimorfismo:
- Modelo de
Usuariocon herencia (Tabla Por Jerarquía - TPH) para representarAlumnos,DocentesyAdministradoresen una única tabla, gestionado por Entity Framework Core.
- Modelo de
- API RESTful Documentada:
- Endpoints claros y consistentes para todas las operaciones.
- Documentación interactiva generada con Swagger / OpenAPI.
El proyecto está estructurado siguiendo los principios de Clean Architecture para garantizar un bajo acoplamiento, alta cohesión y una excelente testeabilidad.
El núcleo de la aplicación. No depende de ninguna otra capa.
- Entidades: Clases POCO que representan los objetos de negocio (ej.
Plan,Usuario,Materia). Contienen la lógica y las reglas de negocio más importantes, con estado protegido (setters privados). - Interfaces de Repositorio: Contratos que definen las operaciones de persistencia (ej.
IPlanRepository), permitiendo que la capa de aplicación sea agnóstica a la base de datos. - Enums y Excepciones de Dominio.
Contiene la lógica de los casos de uso de la aplicación. Orquesta el flujo de datos entre el dominio y la presentación.
- Servicios de Aplicación: (ej.
PlanService) Clases que implementan los casos de uso. Coordinan los repositorios y las entidades para ejecutar las operaciones. - DTOs (Data Transfer Objects): Modelos de datos específicos para cada operación (ej.
PlanDTO,CrearPlanDTO) para asegurar que solo la información necesaria se transfiere entre capas. - Interfaces de Servicios.
- Mapeo (AutoMapper): Perfiles de configuración para mapear eficientemente entre Entidades y DTOs.
- Excepciones Personalizadas: (ej.
BusinessRuleException) para un manejo de errores claro.
Contiene las implementaciones concretas de las interfaces definidas en la capa de aplicación y dominio. Es el lugar de los detalles técnicos.
- Persistencia (Entity Framework Core):
DbContext: Configuración de las entidades, relaciones y el Filtro de Consulta Global para el borrado lógico.Repositorios: Implementaciones concretas de las interfaces de repositorio que interactúan con la base de datos MySQL.Migrations: Historial de cambios del esquema de la base de datos.
- Servicios Externos: (Si los hubiera, como envío de emails, etc.).
La cara visible de la aplicación. Contiene la UI y la API.
- WebApi: Proyecto ASP.NET Core que expone los endpoints RESTful.
Controllers: Reciben las peticiones HTTP, las validan y delegan el trabajo a los servicios de aplicación.
- WinFormsApp: Proyecto de escritorio que actúa como cliente.
API Clients: Clases que utilizanHttpClientFactorypara comunicarse de forma segura y eficiente con la WebApi.Formularios: Vistas que presentan los datos al usuario y capturan sus interacciones.
- Backend: .NET 8, ASP.NET Core, Entity Framework Core 8
- Base de Datos: MySQL
- Librerías Principales:
- AutoMapper: Para el mapeo de objetos.
- BCrypt.NET: Para el hashing de contraseñas.
- Swashbuckle: Para la generación de documentación de la API con Swagger.
- Pomelo.EntityFrameworkCore.MySql: Proveedor de EF Core para MySQL.
- Frontend: Windows Forms (.NET)
Sigue estos pasos para configurar y ejecutar el proyecto en tu entorno local.
- .NET 8 SDK
- Visual Studio 2022 o un editor de tu elección.
- Un servidor de base de datos MySQL (ej. a través de XAMPP, WAMP, o Docker).
- Crea una base de datos vacía en tu servidor MySQL (ej.
tp_final_academia). - Configura la cadena de conexión:
- Abre el archivo
appsettings.jsonen el proyectoWebApi. - Modifica la sección
ConnectionStringscon los datos de tu servidor MySQL:"ConnectionStrings": { "MySqlConnection": "server=localhost;port=3306;database=tp_final_academia;user=tu_usuario;password=tu_contraseña" }
- Abre el archivo
- Aplica las migraciones:
- Abre la Consola del Administrador de Paquetes en Visual Studio.
- Asegúrate de que el "Proyecto predeterminado" sea
Infrastructure. - Ejecuta el siguiente comando para crear todas las tablas en tu base de datos:
Update-Database
El sistema tiene dos proyectos de inicio: la API y el cliente de escritorio. Deben ejecutarse en el orden correcto.
- Ejecutar la API:
- En Visual Studio, haz clic derecho en el proyecto
WebApiy selecciona "Establecer como proyecto de inicio". - Presiona
F5o el botón de play. Se abrirá una ventana del navegador con la interfaz de Swagger. ¡Deja esta aplicación corriendo!
- En Visual Studio, haz clic derecho en el proyecto
- Ejecutar el Cliente de Escritorio:
- Con la API ya en ejecución, haz clic derecho en el proyecto de Windows Forms y selecciona "Establecer como proyecto de inicio".
- Presiona
F5o el botón de play. La aplicación de escritorio se iniciará y podrá comunicarse con la API.
Una vez que la WebApi está en ejecución, puedes acceder a la documentación interactiva completa de la API a través de Swagger.
Navega a la siguiente URL en tu navegador:
http://localhost:[TU_PUERTO]/swagger
Desde aquí, podrás ver todos los endpoints disponibles, sus parámetros, y probarlos directamente.
- Gugliermino Carlos, Franco Zariaga - Desarrollo del proyecto - [carlex74] - [Frasquito3]