Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/proyecto-dise-o/llms.txt

Use this file to discover all available pages before exploring further.

Tienda MiCholo sigue el patrón Model-View-Controller (MVC) sobre ASP.NET Core 10. La aplicación separa claramente las responsabilidades en capas: los controladores orquestan la lógica de negocio, los modelos representan el dominio (productos, ventas, proveedores), y las vistas Razor generan el HTML final que recibe el navegador. La capa de datos utiliza Entity Framework Core 10 con un proveedor SQL Server, mientras que la autenticación y autorización se delegan a ASP.NET Core Identity.

Capas del sistema

Controllers

Siete controladores gestionan todas las rutas de la aplicación. Cada uno extiende Controller e inyecta AppDbContext o los servicios de Identity necesarios.
  • AccountController — login, logout y acceso denegado
  • HomeController — página de inicio y errores
  • ProductoController — CRUD de productos y listado paginado
  • ProveedorController — gestión de proveedores
  • ReporteController — reportes de ventas y stock
  • UsuarioController — administración de usuarios (solo Admin)
  • VentaController — registro y anulación de ventas

Models

Entidades de dominio y enumeraciones que EF Core mapea a tablas SQL Server.Entidades
  • Producto — artículo del inventario
  • Proveedor — empresa suministradora
  • Venta — cabecera de una transacción de venta
  • DetalleVenta — línea de detalle de una venta
  • VentaItem — modelo temporal para el carrito en sesión
Enumeraciones (Models/Enums/)
  • EstadoVentaActiva | Anulada
  • TipoComprobanteBOLETA | FACTURA

ViewModels

Objetos de transferencia de datos entre controladores y vistas, con anotaciones de validación.
  • LoginViewModel — credenciales del formulario de acceso
  • CrearUsuarioVM — datos para registrar un nuevo usuario
  • EditarUsuarioVM — datos para modificar un usuario existente
  • UsuarioVM — representación de usuario para vistas de listado
  • DashboardViewModel — métricas agregadas para el panel principal

Views

Vistas Razor (.cshtml) organizadas por carpetas que corresponden a cada controlador: Account/, Home/, Producto/, Proveedor/, Reporte/, Usuario/, Venta/. La carpeta Shared/ aloja el layout principal y los parciales comunes.

Data

  • AppDbContext — extiende IdentityDbContext<IdentityUser> y expone los DbSet del dominio. Configura relaciones y conversiones de enum en OnModelCreating.
  • SeedData — siembra los roles Admin y Vendedor, crea las cuentas predeterminadas y carga productos desde productos.json al arrancar la aplicación.

Helpers

  • PaginatedList<T> — clase genérica que envuelve List<T> y expone PageIndex, TotalPages, HasPreviousPage y HasNextPage. Crea páginas de resultados de forma asíncrona a partir de cualquier IQueryable<T> usando EF Core.

Flujo de una petición

El siguiente diagrama muestra el ciclo de vida completo desde que el navegador realiza una petición HTTP hasta que recibe la respuesta HTML renderizada.
1

El router recibe la petición

ASP.NET Core evalúa la ruta contra el patrón registrado en Program.cs:
Program.cs
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Producto}/{action=Listar}/{id?}")
    .WithStaticAssets();
Si ningún segmento está presente, la ruta por defecto apunta a Producto/Listar.
2

Middleware de autenticación verifica la cookie

app.UseAuthentication() inspecciona la cookie de sesión. Si el usuario no está autenticado y el recurso requiere identificación, el middleware redirige automáticamente a /Account/Login.
3

Autorización valida el rol

app.UseAuthorization() evalúa los atributos [Authorize] y [Authorize(Roles = "Admin")] del controlador o la acción. Un usuario autenticado pero sin el rol necesario es redirigido a /Account/AccessDenied.
4

El controlador ejecuta la acción

La acción correspondiente es invocada. Habitualmente consulta AppDbContext vía EF Core, aplica filtros o paginación con PaginatedList<T> y construye el ViewModel que pasará a la vista.
5

Razor renderiza la vista

El motor Razor compila la vista .cshtml con el modelo recibido y genera el HTML final. Los layouts de Shared/ envuelven el contenido con cabecera, barra de navegación y pie de página.
6

La respuesta llega al navegador

ASP.NET Core envía la respuesta HTTP con el HTML generado. Los archivos estáticos (CSS, JS, imágenes) son servidos directamente por MapStaticAssets() sin pasar por el pipeline MVC.

Dependencias NuGet

Todos los paquetes apuntan a la versión 10.0.9, alineada con el target framework net10.0.
PaqueteVersiónUso
Microsoft.AspNetCore.Identity.EntityFrameworkCore10.0.9Integración de ASP.NET Core Identity con EF Core; provee IdentityDbContext
Microsoft.EntityFrameworkCore10.0.9ORM base; define DbContext, DbSet y la API fluent de configuración
Microsoft.EntityFrameworkCore.SqlServer10.0.9Proveedor SQL Server; habilita UseSqlServer() en la configuración
Microsoft.EntityFrameworkCore.Design10.0.9Herramientas en tiempo de diseño para generar migraciones (solo build)
Microsoft.EntityFrameworkCore.Tools10.0.9CLI de dotnet-ef; necesario para migrations add y database update (solo build)
Los paquetes Microsoft.EntityFrameworkCore.Design y Microsoft.EntityFrameworkCore.Tools tienen <PrivateAssets>all</PrivateAssets>, por lo que no se incluyen en el artefacto publicado de la aplicación. Solo se usan durante el desarrollo.

Namespace raíz

Todo el código de la aplicación vive bajo el namespace raíz TiendaMiCholo, con los siguientes sub-namespaces:
Sub-namespaceContenido
TiendaMiCholo.ControllersLos siete controladores MVC
TiendaMiCholo.ModelsEntidades de dominio y VentaItem
TiendaMiCholo.Models.EnumsEstadoVenta, TipoComprobante
TiendaMiCholo.ViewModelsViewModels de formularios y vistas
TiendaMiCholo.DataAppDbContext, SeedData
TiendaMiCholo.HelpersPaginatedList<T>
El proyecto usa <ImplicitUsings>enable</ImplicitUsings> y <Nullable>enable</Nullable>, por lo que los namespaces del sistema están disponibles globalmente y el compilador impone referencias anulables de forma estricta en todo el código.

Build docs developers (and LLMs) love