Sistema de alquiler de vehículos desarrollado con .NET 8 siguiendo los principios de Clean Architecture. La aplicación permite gestionar la reserva de vehículos, usuarios, y reseñas con un diseño modular y escalable.
El proyecto está estructurado siguiendo los principios de Clean Architecture con las siguientes capas:
src/CleanArchitecture/
├── CleanArchitecture.Domain/ # Entidades de dominio y lógica de negocio
├── CleanArchitecture.Application/ # Casos de uso y lógica de aplicación
├── CleanArchitecture.Infrastructure/ # Implementaciones de persistencia y servicios externos
└── CleanArchitecture.Api/ # Capa de presentación (Web API)
- Domain: Contiene las entidades principales (Alquiler, Vehículo, Usuario, Review), value objects, eventos de dominio y interfaces de repositorios.
- Application: Implementa casos de uso utilizando CQRS con MediatR, validaciones con FluentValidation, y manejo de comportamientos transversales.
- Infrastructure: Implementa la persistencia con Entity Framework Core, configuraciones de base de datos, y servicios externos.
- Api: Expone endpoints REST, manejo de excepciones, y configuración de la aplicación.
- .NET 8
- Entity Framework Core 7.0.11 con PostgreSQL
- MediatR para implementar CQRS
- FluentValidation para validaciones
- Dapper para consultas de solo lectura
- Bogus para generación de datos de prueba
- Swagger/OpenAPI para documentación de la API
- Gestión de Vehículos: Búsqueda de vehículos disponibles por fechas
- Reservas de Alquiler: Creación y gestión de reservas con validaciones de negocio
- Gestión de Usuarios: Manejo de información de usuarios
- Sistema de Reseñas: Calificaciones y comentarios post-alquiler
- Cálculo de Precios: Sistema dinámico de precios con accesorios
- CQRS (Command Query Responsibility Segregation)
- Domain Events para comunicación entre agregados
- Repository Pattern para abstracción de datos
- Unit of Work para transacciones
- Specification Pattern para consultas complejas
- .NET 8 SDK
- PostgreSQL
- Visual Studio 2022 o VS Code
- Clonar el repositorio
git clone <repository-url>
cd CleanArchitecture- Configurar la base de datos
Actualizar la cadena de conexión en appsettings.json:
{
"ConnectionStrings": {
"Database": "Host=localhost;Port=5432;Database=cleanarchitecture;Username=your_user;Password=your_password;"
}
}- Aplicar migraciones
cd src/CleanArchitecture/CleanArchitecture.Api
dotnet ef database update- Ejecutar la aplicación
dotnet runLa aplicación estará disponible en http://localhost:9000
Entidades Principales:
Alquiler: Gestiona las reservas de vehículosVehiculo: Información de vehículos y disponibilidadUser: Datos de usuarios del sistemaReview: Reseñas y calificaciones
Value Objects:
DateRange: Manejo de períodos de tiempoMoneda: Representación de valores monetariosDireccion: Información de ubicación
Casos de Uso:
ReservarAlquiler: Proceso completo de reservaGetAlquiler: Consulta de información de alquileresSearchVehiculos: Búsqueda de vehículos disponibles
Comportamientos Transversales:
LoggingBehavior: Registro de actividadesValidationBehavior: Validaciones automáticas
Persistencia:
- Configuraciones de Entity Framework
- Repositorios concretos
- Migraciones de base de datos
Servicios:
EmailService: Notificaciones (implementación mock)DateTimeProvider: Abstracción de tiempoSqlConnectionFactory: Conexiones para Dapper
- users: Información de usuarios
- vehiculos: Catálogo de vehículos disponibles
- alquileres: Registros de reservas y alquileres
- reviews: Reseñas y calificaciones
- Uso de snake_case para nomenclatura
- Optimistic concurrency control
- Índices para consultas frecuentes
- Soporte para arrays (accesorios del vehículo)
GET /api/alquileres/{id}- Obtener alquiler por IDPOST /api/alquileres- Crear nueva reserva
GET /api/vehiculos- Buscar vehículos disponibles- Query parameters:
startDate,endDate
- Query parameters:
La aplicación incluye un seeder que genera automáticamente 100 vehículos de prueba con datos realistas usando la librería Bogus.
- Validación de fechas de reserva (inicio < fin)
- Verificación de disponibilidad de vehículos
- Cálculo automático de precios con accesorios
- Manejo de estados de alquiler (Reservado, Confirmado, Completado, etc.)
- Control de concurrencia para evitar dobles reservas
- Middleware personalizado para excepciones
- Validaciones con FluentValidation