# Arquitectura ADAS Core sigue una arquitectura de capas que separa claramente las responsabilidades entre los diferentes proyectos de la solución. ## Capas principales | Capa | Proyecto | Responsabilidad | | --- | --- | --- | | Presentación | `adas-core` | Exposición de la API HTTP, WebSocket Hubs, middleware y composición del grafo de dependencias. | | Aplicación | `adas-core.Application` | Casos de uso, servicios de aplicación, interfaces de repositorio, proveedores y customizaciones por centro. | | Dominio | `adas-core.Domain` | Entidades, modelos, enums, excepciones de negocio y utilidades compartidas. | | Infraestructura | `adas-core.Infrastructure` | Implementaciones de repositorios, acceso a MongoDB, mensajería RabbitMQ, caché Redis y mapeos de persistencia. | | Autenticación | `adas-core.Authentication` | Atributos, servicios de autoridad, gestión de usuarios y extensión de registro de autenticación. | | Módulos | `adas-core.module.*` | Funcionalidades específicas desacopladas (balizas, proxy de dispositivos, relés). | ## Flujo de datos 1. Los **Controllers** reciben las peticiones HTTP y delegan en los **Services** de aplicación. 2. Los **Services** ejecutan la lógica de negocio y utilizan las **interfaces de repositorio** definidas en Application. 3. Los **Repositories** concretos (en Infrastructure) acceden a MongoDB y publican eventos a través de RabbitMQ cuando es necesario. 4. Los **WebSocket Hubs** (`UciHub`) envían actualizaciones en tiempo real a los clientes conectados. ## Dependencias entre proyectos ``` adas-core ├── adas-core.Application │ ├── adas-core.Domain │ └── (interfaces de infraestructura) ├── adas-core.Infrastructure │ ├── adas-core.Application │ └── adas-core.Domain ├── adas-core.Authentication │ └── adas-core.Domain ├── adas-core.module.* │ ├── adas-core.Application │ └── adas-core.Domain └── adas-core.Test └── (todos los proyectos) ```