Módulo File
src/app/modules/file/
Gestiona la subida y almacenamiento de archivos adjuntos en conversaciones.
Modelo — File
| Campo | Tipo | Descripción |
|---|---|---|
_id | ObjectId | — |
tenantId | ObjectId → Tenant | — |
url | string | URL pública en S3/MinIO |
filename | string | Nombre original del archivo |
mimetype | string | Tipo MIME |
type | string | Categoría (IMAGE, PDF, VIDEO, etc.) |
size | number | Tamaño en bytes |
uploadedBy | ObjectId → User | Agente que subió el archivo |
createdAt | Date | — |
updatedAt | Date | — |
Endpoints
| Método | Ruta | Auth | Descripción |
|---|---|---|---|
POST | /api/v1/files/upload | @Auth() | Sube archivo (multipart/form-data) |
GET | /api/v1/files/:id | @Auth() | Metadatos del archivo |
DELETE | /api/v1/files/:id | @Auth() | Elimina archivo (BD + storage) |
Flujo de subida
1. POST /files/upload (multipart)
2. FileController → FileService.upload(file, userId)
3. StorageService.upload(buffer, filename) → retorna URL
4. FileRepository.create({ url, filename, mimetype, size, uploadedBy })
5. Respuesta: metadatos del File creado
Límites (file.constants.ts)
- Tamaño máximo:
10 MB - Tipos permitidos: JPEG, PNG, GIF, PDF, MP4, y otros configurables
Uso en mensajería
Tras subir un archivo, el mediaId del File se pasa en el evento WebSocket SEND_FILE para crear un mensaje de tipo MEDIA.