--- id: "ADR-007" title: "Storage Abstraction Layer" type: "ADR" status: "Accepted" priority: "P0" supersedes: "N/A" superseded_by: "N/A" version: "1.0.0" created_date: "2026-01-10" updated_date: "2026-01-10" --- # ADR-007: Storage Abstraction Layer ## Metadata | Campo | Valor | |-------|-------| | ID | ADR-007 | | Estado | Accepted | | Fecha | 2026-01-10 | | Supersede | N/A | ## Contexto Se necesita soporte para multiples providers de storage (S3, R2, MinIO) con: - Posibilidad de cambiar entre providers segun costos o disponibilidad - Migracion sin cambios de codigo - Soporte multi-tenant con aislamiento ## Opciones Consideradas ### Opcion 1: AWS SDK Solo **Pros:** Nativo, bien documentado **Contras:** Vendor lock-in ### Opcion 2: Abstraccion Propia **Pros:** Control total **Contras:** Mayor mantenimiento ### Opcion 3: AWS SDK v3 S3-Compatible (Elegida) **Pros:** Cualquier storage S3-compatible funciona **Contras:** Limitado a protocolo S3 ## Decision **Usamos AWS SDK v3 con configuracion S3-compatible** permitiendo conectar S3, R2, MinIO sin cambios de codigo. ## Implementacion ```typescript const s3Client = new S3Client({ endpoint: process.env.STORAGE_ENDPOINT, credentials: { accessKeyId: process.env.STORAGE_ACCESS_KEY, secretAccessKey: process.env.STORAGE_SECRET_KEY }, forcePathStyle: true // Necesario para MinIO }); ``` ## Consecuencias ### Positivas - Cualquier storage S3-compatible funciona - Migracion sin cambios de codigo ### Negativas - Limitado a protocolo S3 - No aprovecha features especificos de cada provider --- **Fecha decision:** 2026-01-10 **Autores:** Claude Code (Arquitectura)