FlightBooking - Clean Architecture API

FlightBooking es una API REST desarrollada en .NET 8, que permite buscar vuelos, reservarlos y recuperar reservas existentes. Este proyecto está diseñado como una prueba técnica que ha sido transformada en un ejemplo profesional y público, ideal para portafolios. Se ha creado siguiendo principios de arquitectura limpia, CQRS, separación de responsabilidades y buenas prácticas profesionales.

Repositorio

Puedes explorar el código fuente completo en este link

Tecnologías y librerías utilizadas

Tecnología Propósito
.NET 8 Framework principal de backend
ASP.NET Core Motor de la API REST
MediatR Implementación de CQRS para separar Commands y Queries
EF Core ORM para persistencia en base de datos
SQLite Motor de base de datos ligero para entorno de desarrollo
AutoMapper Mapeo entre DTOs y modelos internos
FluentValidation Validaciones a nivel de DTO y de reglas de negocio
Swagger (Swashbuckle) Exploración y documentación de la API
xUnit + Moq + FluentAssertions Tests unitarios

Estructura del proyecto

El proyecto está dividido en múltiples class libraries siguiendo los principios de Clean Architecture.

Principios aplicados

Clean Architecture

CQRS

SOLID

Flujo de ejecución

  1. El usuario realiza una petición a la API (Search, Create, Retrieve).
  2. El Controller la delega a un Adapter, que:
    • Valida el DTO usando FluentValidation.
    • Mapea a un Command o Query usando AutoMapper.
  3. El Handler ejecuta la lógica de negocio.
    • Consulta el ApiGateway (para búsqueda de vuelos) o el Repository (para persistencia).
    • Ejecuta validaciones de reglas de negocio.
    • Usa Builders para construir objetos de salida.
  4. El resultado es devuelto al Adapter, que lo transforma en DTO de respuesta y lo devuelve al Controller.

Repositorios y Persistencia

Dataset estático

Validaciones

Middleware y manejo de errores

Tests unitarios

Limitaciones y mejoras pendientes

Ruta del dataset local

El archivo flights.json se encuentra en:

src/FlightBooking.Api/Data/flights.json

Este archivo es usado para simular la respuesta de la API externa.

Base de datos

Está ignorada en Git, pero se puede inspeccionar con:

DB Browser for SQLite - https://sqlitebrowser.org/

Autor

Creado por Tiberiu Tasnadi — con cariño y pasión por el código limpio.