curl -X POST https://api.tesisrutas.com/destinos/507f1f77bcf86cd799439011/multimedia \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-F "files=@cathedral_front.jpg" \
-F "files=@cathedral_interior.jpg" \
-F "files=@cathedral_tour.mp4"
{
"message": "Multimedia agregada correctamente",
"total_actual": 3,
"archivos": [
{
"destino_id": "507f1f77bcf86cd799439011",
"url": "https://res.cloudinary.com/demo/image/upload/v1234567890/destinations/507f1f77bcf86cd799439011/abc123.jpg",
"public_id": "destinations/507f1f77bcf86cd799439011/abc123",
"tipo": "image",
"formato": "jpg",
"tamanio_bytes": 2456789,
"anchura": 1920,
"altura": 1080,
"duracion": null,
"fecha_creacion": "2024-03-05T10:30:00.000Z",
"activo": true
},
{
"destino_id": "507f1f77bcf86cd799439011",
"url": "https://res.cloudinary.com/demo/video/upload/v1234567891/destinations/507f1f77bcf86cd799439011/xyz789.mp4",
"public_id": "destinations/507f1f77bcf86cd799439011/xyz789",
"tipo": "video",
"formato": "mp4",
"tamanio_bytes": 15678912,
"anchura": 1920,
"altura": 1080,
"duracion": 45.3,
"fecha_creacion": "2024-03-05T10:30:05.000Z",
"activo": true
}
]
}
Upload and manage multimedia files for heritage sites via Cloudinary
curl -X POST https://api.tesisrutas.com/destinos/507f1f77bcf86cd799439011/multimedia \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-F "files=@cathedral_front.jpg" \
-F "files=@cathedral_interior.jpg" \
-F "files=@cathedral_tour.mp4"
{
"message": "Multimedia agregada correctamente",
"total_actual": 3,
"archivos": [
{
"destino_id": "507f1f77bcf86cd799439011",
"url": "https://res.cloudinary.com/demo/image/upload/v1234567890/destinations/507f1f77bcf86cd799439011/abc123.jpg",
"public_id": "destinations/507f1f77bcf86cd799439011/abc123",
"tipo": "image",
"formato": "jpg",
"tamanio_bytes": 2456789,
"anchura": 1920,
"altura": 1080,
"duracion": null,
"fecha_creacion": "2024-03-05T10:30:00.000Z",
"activo": true
},
{
"destino_id": "507f1f77bcf86cd799439011",
"url": "https://res.cloudinary.com/demo/video/upload/v1234567891/destinations/507f1f77bcf86cd799439011/xyz789.mp4",
"public_id": "destinations/507f1f77bcf86cd799439011/xyz789",
"tipo": "video",
"formato": "mp4",
"tamanio_bytes": 15678912,
"anchura": 1920,
"altura": 1080,
"duracion": 45.3,
"fecha_creacion": "2024-03-05T10:30:05.000Z",
"activo": true
}
]
}
POST /destinos/{id}/multimedia
Upload images or videos to a destination. Files are stored in Cloudinary with automatic optimization and metadata extraction.
multipart/form-data
resource_type: "auto"curl -X POST https://api.tesisrutas.com/destinos/507f1f77bcf86cd799439011/multimedia \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-F "files=@cathedral_front.jpg" \
-F "files=@cathedral_interior.jpg" \
-F "files=@cathedral_tour.mp4"
{
"message": "Multimedia agregada correctamente",
"total_actual": 3,
"archivos": [
{
"destino_id": "507f1f77bcf86cd799439011",
"url": "https://res.cloudinary.com/demo/image/upload/v1234567890/destinations/507f1f77bcf86cd799439011/abc123.jpg",
"public_id": "destinations/507f1f77bcf86cd799439011/abc123",
"tipo": "image",
"formato": "jpg",
"tamanio_bytes": 2456789,
"anchura": 1920,
"altura": 1080,
"duracion": null,
"fecha_creacion": "2024-03-05T10:30:00.000Z",
"activo": true
},
{
"destino_id": "507f1f77bcf86cd799439011",
"url": "https://res.cloudinary.com/demo/video/upload/v1234567891/destinations/507f1f77bcf86cd799439011/xyz789.mp4",
"public_id": "destinations/507f1f77bcf86cd799439011/xyz789",
"tipo": "video",
"formato": "mp4",
"tamanio_bytes": 15678912,
"anchura": 1920,
"altura": 1080,
"duracion": 45.3,
"fecha_creacion": "2024-03-05T10:30:05.000Z",
"activo": true
}
]
}
DELETE /destinos/{id}/multimedia
Remove a specific multimedia file from a destination.
curl -X DELETE "https://api.tesisrutas.com/destinos/507f1f77bcf86cd799439011/multimedia?public_id=destinations/507f1f77bcf86cd799439011/abc123" \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN"
{
"message": "Multimedia eliminada correctamente",
"public_id": "destinations/507f1f77bcf86cd799439011/abc123"
}
asyncio.gather()destinations/{destino_id}/Multimedia entitiesAgregarMultimediaDestinoUseCase$push with $each operatormultimedia array in destination documentcloudinary.uploader.destroy() for each public_iddestinos_router.py:96-201
EliminarMultimediaDestinoUseCase$pull operatormultimedia arraycloudinary.uploader.destroy(public_id, resource_type=tipo)destinos_router.py:205-254
src/infrastructure/services/cloudinary_config.pydestinations/{destino_id}/