Aplicación web ASP.NET Core MVC para gestionar usuarios, vehículos, reparaciones y recambios de un taller. Proyecto académico del Grupo 3, construido con Razor, Entity Framework Core, SQLite y ASP.NET Core Identity.
Estado del proyecto: aplicación en desarrollo. Al iniciar, se elimina y recrea la base de datos; con la siembra activada (valor predeterminado) también se cargan datos de demostración. No debe desplegarse con datos que se necesite conservar.
- Características
- Tecnologías y arquitectura
- Estructura
- Requisitos
- Instalación y ejecución
- Configuración
- Datos de demostración
- Pruebas
- CI y contenedor
- Contributors
- Limitaciones conocidas
- Cuentas y perfiles: registro (solo rol
User), inicio y cierre de sesión con Identity; edición del perfil, cambio de contraseña y avatar. Los roles del taller se asignan desde administración o los datos demo. - Administración de usuarios: búsqueda, creación, edición, activación y eliminación de cuentas desde el área administrativa.
- Vehículos: ficha con matrícula, VIN, marca, modelo, año, combustible, kilometraje y propietario. Los clientes solo consultan sus propios vehículos; el personal del taller puede gestionarlos.
- Reparaciones: asociación de vehículo y mecánico, tipo y estado de reparación, fechas, kilometraje, horas y tarifa de mano de obra; el total suma mano de obra y piezas.
- Recambios: catálogo con referencia, precio y niveles de stock.
- Piezas por reparación: registro de cantidad y precio unitario histórico; añadir piezas descuenta stock y eliminarlas o borrar la reparación lo repone.
- Interfaz: vistas Razor, Bootstrap y recursos locales de Font Awesome.
Los controladores aplican distintas restricciones de acceso según el módulo. La aplicación protege globalmente las peticiones POST con antifalsificación.
- .NET 10 / C# con ASP.NET Core MVC y Razor.
- ASP.NET Core Identity para cuentas, contraseñas, roles y cookies.
- Entity Framework Core 10 con proveedor SQLite.
- Bootstrap, JavaScript y CSS para la interfaz; Font Awesome se sirve desde
wwwroot. - xUnit para pruebas automatizadas.
- Docker y GitHub Actions para empaquetado y CI.
La aplicación registra controladores MVC, autenticación/autorización y servicios. Los controladores usan ApplicationDbContext para el dominio y UserService para operaciones reutilizables de cuentas; las vistas Razor presentan los modelos y view models. DbInitializer crea el esquema y los datos de ejemplo al arrancar.
flowchart LR
Browser[ navegador ] --> MVC[ASP.NET Core MVC]
MVC --> Controllers[Controladores]
Controllers --> Views[Vistas Razor]
Controllers --> UserService[UserService]
UserService --> Identity[ASP.NET Core Identity]
Controllers --> Context[ApplicationDbContext]
Context --> Identity
Context --> Domain[Vehículos · Reparaciones · Recambios]
Context --> SQLite[(SQLite)]
MVC --> Static[CSS · JavaScript · imágenes]
ApplicationUserpuede tener vehículos como cliente y reparaciones asignadas como mecánico.Vehicleconserva su historial deRepair.RepairPartenlazaRepairySparePart, y guarda cantidad y precio unitario.- Las relaciones de historial usan borrado restringido; las líneas
RepairPartse eliminan junto con su reparación.
Controllers/ Acciones MVC para cuentas, usuarios y dominio
Data/ ApplicationDbContext y DbInitializer
Models/ Identity y entidades de taller
Services/ UserService y almacenamiento de avatares
Utilities/ Extensiones para claims del usuario
ViewModels/ Modelos específicos de formularios y páginas
Views/ Plantillas Razor agrupadas por controlador
wwwroot/ CSS, JavaScript, imágenes y librerías locales
tests/G3AspNet.Tests/ Proyecto de pruebas xUnit
docs/ Guías de IDE y dependencias
.github/workflows/ Flujo de CI de GitHub Actions
Dockerfile Imagen multi-stage para contenedor
- SDK de .NET 10.
global.jsonfija10.0.100y permite versiones posteriores de la misma línea medianterollForward: latestFeature. - Git para clonar el repositorio.
- Visual Studio Code y C# Dev Kit, opcionales para desarrollar con el entorno recomendado: instalación en Windows, macOS y Linux.
- Docker, opcional, para ejecutar la imagen.
Desde una terminal:
git clone https://github.com/certidevs/g3_aspnet.git
cd g3_aspnet
dotnet --version
dotnet restore G3AspNet.sln
dotnet run --project G3AspNet.csproj --launch-profile httpAbre http://localhost:5107. El perfil http establece el entorno Development; también existe un perfil https en Properties/launchSettings.json.
Para compilar y ejecutar las pruebas:
dotnet build G3AspNet.sln
dotnet test G3AspNet.slnLos valores predeterminados están en appsettings.json. ASP.NET Core permite sustituirlos mediante variables de entorno usando __ como separador jerárquico.
| Clave | Valor predeterminado | Uso |
|---|---|---|
ConnectionStrings:DefaultConnection |
Data Source=App_Data/g3.db |
Archivo SQLite relativo a la raíz del proyecto. |
SeedData:Enabled |
true |
Carga roles, usuarios y datos de ejemplo después de crear el esquema. |
FileUploads:Images:MaxFileSizeBytes |
5242880 |
Tamaño máximo de imagen: 5 MiB. |
FileUploads:Images:AllowedExtensions |
.jpg, .jpeg, .png, .gif, .webp |
Extensiones aceptadas para avatares; también se comprueba la firma del archivo. |
Por ejemplo, SeedData__Enabled=false evita crear los datos demo, pero no evita que se elimine y recree la base de datos.
Con SeedData:Enabled activado, el arranque crea cuentas de prueba. Sus contraseñas locales se definen en Data/DbInitializer.cs; no se reproducen aquí ni deben usarse en un entorno accesible públicamente.
| Usuario(s) | Rol |
|---|---|
admin |
Admin |
user |
User |
customer, customer2, customer3 |
Customer |
mechanic, mechanic2, mechanic3 |
Mechanic |
También se insertan vehículos, recambios, reparaciones y piezas para probar las relaciones y el inventario. No uses estas cuentas en un entorno accesible públicamente.
El proyecto tests/G3AspNet.Tests usa xUnit. Ejecuta toda la solución con dotnet test G3AspNet.sln; para más información sobre una prueba concreta, consulta los archivos *Tests.cs del proyecto.
El workflow Build and test .NET se ejecuta en push a main, pull requests hacia main y ejecución manual. Restaura, compila en Release y ejecuta las pruebas.
La imagen Docker es opcional:
docker build -t g3-aspnet .
docker run --rm -p 10000:10000 g3-aspnetLa aplicación escucha en el puerto indicado por PORT o, si no está definido, en 10000. El contenedor no configura persistencia para SQLite y el inicializador vuelve a borrar la base de datos en cada inicio. No hay un procedimiento de despliegue de producción documentado.
Roles inferidos únicamente de los cambios visibles en el historial; no representan cargos oficiales. Los recuentos corresponden a git shortlog main al 8 de noviembre de 2026: se agrupan aliases con evidencia de perfil/email, incluyen commits de merge.
| Colaborador | Rol técnico inferido | Contribuciones principales | Commits |
|---|---|---|---|
Iván López · irilopa |
Full-stack, énfasis en dominio y backend | Modelos y gestión MVC de reparaciones y piezas; relaciones y stock. | 22 |
| Rafa-Gamero | Full-stack, vehículos y vistas | Entidad y reglas de vehículos, roles/datos iniciales y vistas de reparación. | 15 |
| ricardohsm1996 | Backend, catálogo y persistencia | Entidad y controlador de recambios, contexto y configuración de datos. | 12 |
| rubogar | Interfaz/UI con contribuciones MVC | Estilos y elementos visuales de acceso; controlador y vista de vehículos. | 9 |
Alan Sastre · alansastre |
Base del proyecto y configuración backend | Esqueleto inicial, estrategia de inicialización de base de datos y estructura MVC. | 4 |
| M. del Olmo | Rol no determinado; aportes puntuales a EF Core | Correcciones de persistencia y modelos en cambios de Entity Framework Core. | 2 |
- Iván López: desarrolló modelos, relaciones y flujos MVC de reparaciones y piezas, incluidos el descuento y la reposición de stock. Evidencias:
Models/Repair.cs,Models/RepairPart.cs,Controllers/RepairController.cs,Controllers/RepairPartsController.csy vistas de ambos módulos; también integró recursos visuales y documentación. - Rafa-Gamero: trabajó en la entidad y relaciones de vehículos, datos de ejemplo y vistas de reparación. Evidencias:
Models/Vehicle.cs,Data/DbInitializer.cs,Data/ApplicationDbContext.csy PRs #8, #9, #21 y #27. - ricardohsm1996: implementó el modelo/controlador de recambios y cambios asociados al contexto de datos. Evidencias:
Models/SparePart.cs,Controllers/SparePartsController.cs,Data/ApplicationDbContext.csy PR #22. - rubogar: concentró trabajo en interfaz y estilos, con contribuciones al módulo de vehículos. Evidencias:
wwwroot/css/site.css,Views/Shared/_Layout.cshtml, vistas de cuenta yControllers/VehicleController.cs. - Alan Sastre: contribuyó al esqueleto inicial y al arranque/configuración de datos y estructura MVC. Evidencias: commits iniciales del proyecto y cambios en
Data/DbInitializer.csy controladores/vistas. - M. del Olmo: realizó cambios puntuales en persistencia y modelos. La muestra es demasiado pequeña para asignar un rol técnico; los archivos incluyen
Data/ApplicationDbContext.cs, modelos y migraciones del historial.
- La base de datos se destruye y se vuelve a crear en cada arranque, incluso si
SeedData:Enabledestá desactivado. El mecanismo actual esEnsureDeleted/EnsureCreated, no migraciones. docs/DEPENDENCIAS.mdconserva instrucciones históricas para crear migraciones; no corresponden al mecanismo actual y deben armonizarse.- No se ha configurado una licencia en los metadatos del repositorio; no se declara una licencia aquí.
- No se detectaron integraciones de API externas en la aplicación.
- Referencias: repositorio en GitHub, guía de IDE y registro de dependencias.