workspace/projects/gamilit/docs/90-transversal/arquitectura/STORAGE-SYSTEM.md
rckrdmrd 608e1e2a2e
Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Multi-project update: gamilit, orchestration, trading-platform
Gamilit:
- Backend: Teacher services, assignments, gamification, exercise submissions
- Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring
- Database: DDL functions, seeds for dev/prod, auth/gamification schemas
- Docs: Architecture, features, guides cleanup and reorganization

Core/Orchestration:
- New workspace directives index
- Documentation directive

Trading-platform:
- Database seeds and inventory updates
- Tech leader validation report

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 07:17:46 -06:00

209 lines
5.1 KiB
Markdown

# Sistema de Almacenamiento (Storage)
**Schema:** `storage`
**Propósito:** Integración con sistema de almacenamiento de archivos (Storage compatible)
**Estado:** ✅ Implementado
**Última actualización:** 2025-11-08
---
## 📋 Descripción
El schema `storage` proporciona tipos y estructuras para la integración con el sistema de almacenamiento de archivos de Storage compatible, utilizado para gestionar archivos multimedia de la plataforma (imágenes, videos, documentos, etc.).
---
## 🗂️ Objetos del Schema
### Enum: `buckettype`
**Archivo:** `apps/database/ddl/schemas/storage/enums/buckettype.sql`
**Descripción:** Define los tipos de buckets de almacenamiento disponibles.
**Valores:**
- `STANDARD` - Bucket estándar para archivos generales (imágenes de perfil, documentos, etc.)
- `ANALYTICS` - Bucket para datos de analytics y métricas
**Uso:**
Este enum probablemente se utiliza en el backend para categorizar y gestionar diferentes tipos de buckets de almacenamiento con políticas y configuraciones específicas.
---
## 🔗 Integración
### Storage compatible
El schema `storage` está diseñado para integrarse con un sistema de almacenamiento S3-compatible, que proporciona:
- Almacenamiento de archivos con CDN global
- Transformaciones de imágenes automáticas
- Políticas de acceso (RLS)
- Gestión de cuotas y límites
### Buckets Esperados
Basado en el enum, se esperan al menos 2 buckets:
1. **Bucket STANDARD**
- Propósito: Archivos generales de usuarios
- Contenido típico:
- Imágenes de perfil
- Avatares
- Documentos subidos
- Recursos educativos multimedia
2. **Bucket ANALYTICS**
- Propósito: Datos de analytics y reportes
- Contenido típico:
- Reportes exportados (PDF, CSV)
- Gráficos y visualizaciones
- Logs de sistema
---
## 📊 Relaciones con Otros Schemas
### Tablas que Referencian Storage
Es probable que las siguientes tablas hagan referencia a archivos en storage:
- `auth_management.profiles` - Avatar de usuario
- `educational_content.media_resources` - Recursos multimedia educativos
- `content_management.media_files` - Archivos de contenido
- `gamification_system.achievements` - Imágenes de logros/insignias
**Nota:** Las referencias no están en la BD directamente, sino que se manejan como URLs o paths desde el backend.
---
## 🔧 Uso en Backend
### Servicio de Storage
El backend debería tener un servicio de storage que:
1. Crea y gestiona buckets según el tipo
2. Sube archivos al bucket apropiado
3. Genera URLs firmadas para acceso controlado
4. Aplica transformaciones de imagen
5. Gestiona políticas de acceso
**Ejemplo conceptual:**
```typescript
// apps/backend/src/modules/storage/storage.service.ts
enum BucketType {
STANDARD = 'STANDARD',
ANALYTICS = 'ANALYTICS'
}
class StorageService {
async uploadFile(file: File, bucketType: BucketType) {
const bucket = this.getBucketName(bucketType);
// Upload to Storage compatible
}
}
```
---
## 📝 Configuraciones Recomendadas
### Bucket STANDARD
```json
{
"name": "gamilit-standard",
"public": false,
"file_size_limit": 52428800, // 50MB
"allowed_mime_types": [
"image/jpeg",
"image/png",
"image/gif",
"image/webp",
"application/pdf"
]
}
```
### Bucket ANALYTICS
```json
{
"name": "gamilit-analytics",
"public": false,
"file_size_limit": 104857600, // 100MB
"allowed_mime_types": [
"application/pdf",
"text/csv",
"application/json"
]
}
```
---
## 🛡️ Seguridad
### Políticas RLS Recomendadas
Para el bucket STANDARD:
- Usuarios autenticados pueden subir a su carpeta personal
- Administradores pueden acceder a todos los archivos
- Archivos públicos (avatares) accesibles sin auth
Para el bucket ANALYTICS:
- Solo administradores y teachers pueden acceder
- Exportaciones personales solo por el usuario creador
---
## 📈 Métricas y Monitoring
### Métricas Importantes
1. **Uso de almacenamiento** por bucket
2. **Número de archivos** por tipo
3. **Ancho de banda** consumido
4. **Errores de upload/download**
5. **Transformaciones de imagen** ejecutadas
---
## 🔗 Referencias
- **Schema:** `apps/database/ddl/schemas/storage/`
- **Enum:** `apps/database/ddl/schemas/storage/enums/buckettype.sql`
- **Storage compatible Docs:** S3/Storage compatible
- **Backend (estimado):** `apps/backend/src/modules/storage/`
---
## ⚠️ Notas
- ✅ Enum definido y listo para uso
- ⚠️ No hay tablas en este schema (integración externa)
- ⚠️ Backend y políticas de storage requieren implementación/documentación
- 📋 Considerar agregar más tipos de buckets si es necesario:
- `BACKUPS` - Para respaldos de sistema
- `TEMP` - Para archivos temporales con auto-delete
- `ARCHIVE` - Para archivos archivados (cold storage)
---
## 🎯 Próximos Pasos
1. Documentar servicio de storage en backend
2. Crear políticas RLS para buckets
3. Implementar gestión de cuotas por tenant
4. Configurar CDN y transformaciones de imagen
5. Crear sistema de limpieza de archivos huérfanos
---
**Creado:** 2025-11-08
**Tipo:** Documentación retroactiva
**Estado:** ✅ Documentación básica completa