File: /var/www/api-storage/README.md
# đź§± Arquitectura de Proyecto - Clean Architecture con NestJS
Este proyecto sigue los principios de **Clean Architecture**, separando responsabilidades en distintas capas para promover un cĂłdigo desacoplado, mantenible y escalable.
---
## đź—‚ Estructura de Carpetas
src/
├── core/ # Capa de dominio (entidades, interfaces)
│ ├── entities/ # Entidades de negocio
│ └── interfaces/ # Contracts/Ports (SOLID)
├── infrastructure/ # Infraestructura externa
│ ├── minio/ # Configuración de MinIO
│ └── repositories/ # Implementación de repositorios
├── application/ # Casos de uso
│ └── use-cases/ # Lógica de negocio
├── api/ # Capa de presentación
│ ├── controllers/ # Controladores REST
│ ├── dtos/ # Objetos de transferencia
│ └── exceptions/ # Filtros de excepciones
└── main.ts # Punto de entrada
---
## 🔍 Descripción por Capas
### `core/` - Capa de Dominio
Responsable de definir la lĂłgica de negocio, sin depender de frameworks ni tecnologĂas externas.
- **`entities/`**
Contiene las entidades de negocio con sus propiedades y comportamientos.
- **`interfaces/`**
Define contratos (puertos) que serán implementados por la infraestructura. Ejemplo: interfaces de repositorios.
- **`use-cases/`**
Define los casos de uso del negocio (la lĂłgica pura), orquestando entidades e interfaces.
### `infrastructure/` - Capa de Infraestructura
Encargada de implementar las interfaces definidas en `core/`, adaptando el mundo externo al dominio.
- **`config/`**
Configuraciones como variables de entorno, inicializaciĂłn de mĂłdulos, etc.
- **`minio/`**
Cliente y configuraciones para la interacciĂłn con MinIO.
- **`repositories/`**
Implementaciones concretas de interfaces de repositorio. AquĂ se conecta con bases de datos, APIs externas, etc.
### `application/` - Capa de AplicaciĂłn
Responsable de manejar la lĂłgica de entrada/salida del sistema, coordinando las peticiones hacia los casos de uso.
- **`controllers/`**
Controladores de NestJS que reciben las peticiones HTTP y llaman a los casos de uso del dominio.
### `shared/` - CĂłdigo ComĂşn
Contiene utilidades, constantes, excepciones personalizadas y cualquier otro recurso que pueda ser compartido entre capas.
---
## 🧪 Principios de Diseño Aplicados
- **SeparaciĂłn de Responsabilidades:** Cada capa tiene una Ăşnica responsabilidad.
- **InversiĂłn de Dependencias:** El dominio no depende de ninguna tecnologĂa o infraestructura.
- **Desacoplamiento:** Cada componente puede ser probado e intercambiado de forma independiente.
- **Testabilidad:** Las capas del dominio pueden probarse sin necesidad de un entorno real.
---
## 🚀 Comenzar
1. Clona el repositorio:
```bash
git clone https://github.com/usuario/proyecto.git
cd proyecto