|
|
@@ -1,102 +1,186 @@
|
|
|
-## Ejemplo de Aplicación .NET con MVC y API REST 🚀
|
|
|
+# Aplicación de Gestión de Productos con .NET y Svelte
|
|
|
|
|
|
-A continuación, encontrarás instrucciones detalladas sobre cómo configurar y ejecutar este proyecto .NET. El proyecto consta de varios componentes que incluyen lógica de negocio, aplicaciones web y una API REST para administrar productos.
|
|
|
+Este proyecto es un ejemplo educativo que muestra cómo crear una aplicación web completa utilizando .NET para el backend y Svelte para el frontend, implementando patrones de diseño modernos y buenas prácticas de desarrollo.
|
|
|
|
|
|
-## Estructura del Proyecto
|
|
|
+## Descripción del Proyecto
|
|
|
|
|
|
-La estructura del proyecto es la siguiente:
|
|
|
+La aplicación permite gestionar un catálogo de productos con operaciones CRUD (Crear, Leer, Actualizar, Eliminar) a través de diferentes interfaces:
|
|
|
+
|
|
|
+- **API REST**: Ofrece endpoints para manipular productos a través de HTTP
|
|
|
+- **Backoffice (MVC)**: Interfaz administrativa basada en ASP.NET MVC
|
|
|
+- **Frontoffice (Svelte)**: Interfaz de usuario moderna construida con SvelteKit
|
|
|
+
|
|
|
+## Arquitectura del Proyecto
|
|
|
+
|
|
|
+El proyecto sigue una arquitectura en capas con los siguientes componentes:
|
|
|
|
|
|
```
|
|
|
-- global.json
|
|
|
-- Products.sln
|
|
|
-- Products.Common/
|
|
|
-- Products.Business/
|
|
|
-- Products.Backoffice/
|
|
|
-- Products.API/
|
|
|
-- Products.Frontoffice/
|
|
|
+- Products.sln # Solución principal
|
|
|
+- Products.Common/ # DTOs, excepciones y tipos compartidos
|
|
|
+- Products.Business/ # Lógica de negocio, servicios y repositorios
|
|
|
+- Products.API/ # API REST
|
|
|
+- Products.Backoffice/ # Aplicación MVC para administración
|
|
|
+- Products.Frontoffice/ # Frontend con Svelte
|
|
|
```
|
|
|
|
|
|
-- **global.json**: Archivo de configuración global para la versión de .NET SDK.
|
|
|
-- **Products.sln**: Archivo de solución principal del proyecto.
|
|
|
-- **Products.Common**: Contiene DTOs y excepciones compartidas.
|
|
|
-- **Products.Business**: Contiene la lógica de negocio del proyecto, incluidos servicios y repositorios.
|
|
|
-- **Products.Backoffice**: Aplicación MVC para el backoffice de administración.
|
|
|
-- **Products.API**: Aplicación MVC que expone una API REST para administrar productos.
|
|
|
-- **Products.Frontoffice**: Proyecto Svelte que muestra cómo consumir la API REST.
|
|
|
+### Patrón de Arquitectura
|
|
|
+
|
|
|
+- **Diseño por Capas**: Separación clara de responsabilidades entre capas
|
|
|
+- **Patrón Repositorio**: Abstracción del acceso a datos
|
|
|
+- **Inyección de Dependencias**: Acoplamiento débil entre componentes
|
|
|
+- **MVC (Model-View-Controller)**: Para la aplicación Backoffice
|
|
|
+- **REST**: Para la API de servicios
|
|
|
+
|
|
|
+## Tecnologías Utilizadas
|
|
|
+
|
|
|
+### Backend
|
|
|
+
|
|
|
+- **.NET 9**: Framework base para el desarrollo
|
|
|
+- **ASP.NET Core**: Para la API REST y aplicación MVC
|
|
|
+- **Entity Framework Core**: ORM para acceso a datos
|
|
|
+- **AutoMapper**: Para mapeo entre objetos de dominio y DTOs
|
|
|
+- **Newtonsoft.Json**: Para serialización/deserialización JSON
|
|
|
+- **In-Memory Database**: Para almacenamiento de datos (en este ejemplo educativo)
|
|
|
+
|
|
|
+### Frontend
|
|
|
+
|
|
|
+- **SvelteKit**: Framework para la creación de la interfaz de usuario
|
|
|
+- **TypeScript**: Para tipado estático en el frontend
|
|
|
+- **Axios**: Para comunicación HTTP con la API
|
|
|
+- **Zod**: Para validación de datos en el cliente
|
|
|
+
|
|
|
+### DevOps
|
|
|
+
|
|
|
+- **Docker**: Para contenerización de la aplicación
|
|
|
+- **Fly.io**: Ejemplo de despliegue en la nube
|
|
|
+
|
|
|
+## Patrones de Diseño Implementados
|
|
|
+
|
|
|
+- **DTO (Data Transfer Objects)**: Para transferencia de datos entre capas
|
|
|
+- **Repositorio**: Para abstracción del acceso a datos
|
|
|
+- **Servicios**: Para encapsular la lógica de negocio
|
|
|
+- **Middleware**: Para manejo centralizado de excepciones
|
|
|
+- **CORS**: Configuración para permitir solicitudes cross-origin
|
|
|
+- **Enumeraciones**: Para tipos de datos con valores predefinidos (Colores)
|
|
|
+
|
|
|
+## Configuración del Entorno de Desarrollo
|
|
|
|
|
|
-## Pasos para Iniciar
|
|
|
+### Requisitos Previos
|
|
|
|
|
|
-A continuación, se describen los pasos para configurar y ejecutar el proyecto:
|
|
|
+- [.NET 9 SDK](https://dotnet.microsoft.com/download/dotnet/9.0)
|
|
|
+- [Node.js](https://nodejs.org/) (v20.x o superior)
|
|
|
|
|
|
-1. **Requisitos Previos**:
|
|
|
- - Asegúrate de tener instalado el SDK de .NET en tu máquina.
|
|
|
- - Asegúrate de tener Node.js instalado para ejecutar el proyecto Svelte.
|
|
|
+### Pasos para Ejecutar el Proyecto
|
|
|
|
|
|
-2. **Clonar el Repositorio**:
|
|
|
- Clona el repositorio del proyecto desde su ubicación.
|
|
|
+1. **Clonar el Repositorio**:
|
|
|
+
|
|
|
+ ```
|
|
|
+ git clone <url-del-repositorio>
|
|
|
+ cd Products
|
|
|
+ ```
|
|
|
+
|
|
|
+2. **Restaurar Paquetes NuGet**:
|
|
|
|
|
|
-4. **Restaurar Paquetes NuGet**:
|
|
|
- Abre una terminal en la ubicación de la solución (`Products.sln`) y ejecuta el comando:
|
|
|
```
|
|
|
dotnet restore
|
|
|
```
|
|
|
|
|
|
-5. **Ejecutar Aplicaciones MVC**:
|
|
|
- - Para el proyecto Backoffice, navega a la carpeta `Products.Backoffice` en la terminal y ejecuta:
|
|
|
- ```bash
|
|
|
- dotnet run
|
|
|
- ```
|
|
|
- o desde la raiz del proyecto:
|
|
|
- ```bash
|
|
|
- dotnet run --project Products.Backoffice
|
|
|
- ```
|
|
|
- - Para el proyecto API, navega a la carpeta `Products.API` en la terminal y ejecuta:
|
|
|
- ```
|
|
|
- dotnet run
|
|
|
- ```
|
|
|
- o desde la raiz del proyecto:
|
|
|
- ```bash
|
|
|
- dotnet run --project Products.API
|
|
|
- ```
|
|
|
-
|
|
|
-6. **Ejecutar Proyecto Svelte**:
|
|
|
- - Navega a la carpeta `Products.Frontoffice` en la terminal.
|
|
|
- - Instala las dependencias ejecutando `npm install`.
|
|
|
- - Luego, inicia la aplicación con `npm run dev`.
|
|
|
-
|
|
|
-7. **¡Listo!**:
|
|
|
- Ahora puedes acceder a las aplicaciones MVC desde tu navegador y probar la API REST.
|
|
|
- Además, el proyecto Svelte te mostrará cómo consumir la API desde un frontend.
|
|
|
-
|
|
|
-## Migraciones (branch `migrations`)
|
|
|
-
|
|
|
-Inrtalar `dotnet ef` ([how-to](httpr://learn.microsoft.com/en-us/ef/core/cli/dotnet)) para poder gestionar las migraciones.
|
|
|
-
|
|
|
-- `dotnet ef database update`: Actualiza la base de datos
|
|
|
-- `dotnet ef migrations add <nombre de la migración>`: Crea una nueva migración
|
|
|
-- `dotnet ef migrations remove <nombre de la migración>`: Elimina una migración
|
|
|
-- `dotnet ef migrations list`: Lista las migraciones
|
|
|
-
|
|
|
-```bash
|
|
|
-dotnet ef database update
|
|
|
-dotnet ef migrations add <nombre de la migración>
|
|
|
-dotnet ef migrations remove <nombre de la migración>
|
|
|
-dotnet ef migrations list
|
|
|
-```
|
|
|
+3. **Ejecutar la API REST**:
|
|
|
+
|
|
|
+ ```
|
|
|
+ dotnet run --project Products.API
|
|
|
+ ```
|
|
|
+
|
|
|
+ La API estará disponible en: https://localhost:7234 (o http://localhost:5192)
|
|
|
+
|
|
|
+4. **Ejecutar la Aplicación Backoffice (MVC)**:
|
|
|
+
|
|
|
+ ```
|
|
|
+ dotnet run --project Products.Backoffice
|
|
|
+ ```
|
|
|
|
|
|
-**Nota**: Como este proyecto utiliza la base de datos SQLite, es imporante que se respete la ubicación de la base de datos.
|
|
|
-Es por ello que los comandos deben se ejecutados desde la raiz del proyecto haciendo uso del flag `--project`.
|
|
|
+ La aplicación MVC estará disponible en: https://localhost:7103
|
|
|
|
|
|
-```bash
|
|
|
-dotnet ef database update --project Products.Business
|
|
|
-dotnet ef migrations add <nombre de la migración> --project Products.Business
|
|
|
-dotnet ef migrations remove <nombre de la migración> --project Products.Business
|
|
|
-dotnet ef migrations list --project Products.Business
|
|
|
+5. **Ejecutar la Aplicación Frontoffice (Svelte)**:
|
|
|
+ ```
|
|
|
+ cd Products.Frontoffice
|
|
|
+ npm install
|
|
|
+ npm run dev
|
|
|
+ ```
|
|
|
+ La aplicación Svelte estará disponible en: http://localhost:5173
|
|
|
+
|
|
|
+## Estructura del Código
|
|
|
+
|
|
|
+### Products.Common
|
|
|
+
|
|
|
+Contiene elementos compartidos:
|
|
|
+
|
|
|
+- **Dtos/**: Objetos de transferencia de datos
|
|
|
+- **Types/**: Enumeraciones y tipos personalizados
|
|
|
+- **Exceptions/**: Excepciones personalizadas
|
|
|
+
|
|
|
+### Products.Business
|
|
|
+
|
|
|
+Contiene la lógica de negocio:
|
|
|
+
|
|
|
+- **Domain/**: Entidades de dominio
|
|
|
+- **Service/**: Servicios que implementan la lógica de negocio
|
|
|
+- **Repository/**: Acceso a datos
|
|
|
+- **Persistence/**: Contexto de Entity Framework
|
|
|
+- **AutoMapperProfiles/**: Configuración de mapeo entre entidades y DTOs
|
|
|
+
|
|
|
+### Products.API
|
|
|
+
|
|
|
+API REST:
|
|
|
+
|
|
|
+- **Controllers/**: Endpoints de la API
|
|
|
+- **Middlewares/**: Configuración de middleware para manejo de excepciones
|
|
|
+
|
|
|
+### Products.Backoffice
|
|
|
+
|
|
|
+Aplicación MVC:
|
|
|
+
|
|
|
+- **Controllers/**: Controladores MVC
|
|
|
+- **Views/**: Vistas Razor
|
|
|
+- **Models/**: ViewModels específicos para la UI
|
|
|
+
|
|
|
+### Products.Frontoffice
|
|
|
+
|
|
|
+Aplicación Svelte:
|
|
|
+
|
|
|
+- **src/routes/**: Páginas y componentes
|
|
|
+- **src/lib/**: Utilidades, stores y lógica compartida
|
|
|
+- **src/lib/api.ts**: Cliente de la API REST
|
|
|
+
|
|
|
+## Aspectos Educativos del Proyecto
|
|
|
+
|
|
|
+Este proyecto sirve como referencia para aprender sobre:
|
|
|
+
|
|
|
+1. **Arquitectura en Capas**: Separación de responsabilidades
|
|
|
+2. **API REST**: Principios y buenas prácticas
|
|
|
+3. **Inyección de Dependencias**: Configuración y uso en .NET
|
|
|
+4. **Entity Framework Core**: Configuración básica y seeds
|
|
|
+5. **Manejo de Excepciones**: Middleware centralizado
|
|
|
+6. **Validación de Datos**: Tanto en backend como frontend
|
|
|
+7. **Frontend Moderno**: Integración con frameworks modernos (Svelte)
|
|
|
+8. **Serialización/Deserialización**: Conversión entre objetos y JSON
|
|
|
+9. **Enumeraciones**: Uso en C# y TypeScript
|
|
|
+10. **Patrones de Repositorio y Servicio**: Implementación práctica
|
|
|
+
|
|
|
+## Despliegue
|
|
|
+
|
|
|
+El proyecto incluye un Dockerfile para contenerización y puede ser desplegado en servicios como Fly.io:
|
|
|
+
|
|
|
+```
|
|
|
+fly deploy
|
|
|
```
|
|
|
|
|
|
-## Deploy en Fly.io
|
|
|
+Un ejemplo de despliegue está disponible en: https://tsi-products.fly.dev/
|
|
|
+
|
|
|
+## Licencia
|
|
|
|
|
|
-Se ha realizado un deploy de la aplicación MVC en Fly.io. Puedes acceder a ella desde el siguiente enlace:
|
|
|
-https://tsi-products.fly.dev/
|
|
|
+Este proyecto está bajo la Licencia MIT. Ver el archivo [LICENSE](LICENSE) para más detalles.
|
|
|
|
|
|
+---
|
|
|
|
|
|
+**Nota**: Este proyecto es principalmente educativo y está diseñado para demostrar conceptos y patrones en un entorno simplificado. Algunas prácticas pueden necesitar ser adaptadas para aplicaciones de producción a gran escala.
|