Core model
Document entries track file identity, original name, storage path, mime type, size, generated formats, and optional business links through table_name and table_key.
Storage abstraction
A shared StorageService contract allows the same REST API to run on different backends:
- S3 or MinIO implementation.
- Filesystem implementation.
- Blob storage placeholder branch.
Endpoints
GET /api/documents
GET /api/documents/{id}
POST /api/documents
PUT /api/documents/{uuid}
PUT /api/documents/{id}/data
DELETE /api/documents/{uuid}?delete=true
GET /api/documents/{uuid}/download
GET /api/documents/{uuid}/download/{name}
GET /api/documents/{uuid}/webp
On-demand format generation
When a requested format does not exist, the API can trigger asynchronous conversion and return currently available content. Future requests receive cached derivatives.
Async pipeline
Image events are processed asynchronously and generated formats are stored back through the configured storage service implementation.