Aplicación backend desarrollada en .NET 8 con arquitectura limpia, orientada a la gestión de productos y categorías. Este proyecto forma parte de mi portfolio personal, donde aplico buenas prácticas, patrones modernos y principios de diseño escalable.
- Tecnologías implementadas
- Estructura del proyecto
- Cómo ejecutar
- Guía de migraciones
- Estado del proyecto
- Endpoints de la API
- Licencia
- .NET 8 + C# 12
- Entity Framework Core
- PostgreSQL
- Arquitectura limpia
- DDD (Domain-Driven Design)
- CQRS + MediatR
- FluentResults
- Swagger
- [-] Autenticación JWT
- Frontend Angular
- Comunicación en tiempo real con SignalR
- Docker para desarrollo y despliegue
El proyecto sigue una arquitectura en capas basada en separación de responsabilidades:
-
ProductManager.API
Capa de presentación. Expone los endpoints HTTP y configura la aplicación. -
ProductManager.Application
Contiene la lógica de negocio, casos de uso, comandos y consultas (CQRS), validaciones y contratos. -
ProductManager.Domain
Define el modelo del dominio: entidades, Value Objects y reglas de negocio puras. -
ProductManager.Infrastructure
Implementa la persistencia de datos con EF Core, mapeos y acceso a PostgreSQL.
-
Clonar el repositorio:
git clone https://github.com/WesleyCarloosForte/ProductManager.git cd ProductManager -
Restaurar paquetes:
dotnet restore
-
Migraciones:
Para conocer cómo se gestionan las migraciones en este proyecto (desde línea de comandos o Visual Studio), consultá el documento completo:
-
Accedé a Swagger en:
https://localhost:5001/swagger
Este proyecto está en desarrollo activo. Próximas funcionalidades planificadas:
- Backend con arquitectura limpia y CQRS
- CRUD de Productos y Categorías
- Base de datos con EF Core + PostgreSQL
- Documentación Swagger
- [-] Autenticación con JWT
- Frontend en Angular (en desarrollo)
- Comunicación en tiempo real con SignalR
- Pruebas unitarias con xUnit
- Docker
- CI/CD (despliegue automático)
| Método | Ruta | Descripción |
|---|---|---|
| GET | /Product/all | Lista todos los productos |
| GET | /Product/byId/{id} | Obtiene un producto por ID |
| POST | /Product | Crea un nuevo producto |
| PUT | /Product | Actualiza un producto existente |
| DELETE | /Product/delete/{id} | Elimina un producto por ID |
| Método | Ruta | Descripción |
|---|---|---|
| GET | /Category/getAll | Lista todas las categorías |
| GET | /Category/getById/{id} | Obtiene una categoría por ID |
| POST | /Category | Crea una nueva categoría |
| PUT | /Category | Actualiza una categoría existente |
| DELETE | /Category/delete/{id} | Elimina una categoría por ID |
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/users | Obtiene todos los usuarios |
| GET | /api/users/{id} | Obtiene un usuario por ID |
| POST | /api/users | Crea un nuevo usuario |
| PUT | /api/users/{id} | Actualiza un usuario existente |
| DELETE | /api/users/{id} | Elimina un usuario por ID |
Este proyecto está bajo la licencia MIT.
Podés usarlo, modificarlo y compartirlo libremente, siempre que se mantenga el aviso de copyright.