@startuml title Document Upload Flow actor User participant "Frontend (SvelteKit)" as Frontend participant "Backend (Spring Boot)" as Backend participant "PermissionAspect (AOP)" as Aspect participant DocumentService as DocSvc participant FileService as FileSvc participant MinIO participant PostgreSQL as DB User -> Frontend: Submit edit form (file + metadata) Frontend -> Backend: PUT /api/documents/{id}\nmultipart/form-data + Authorization header Backend -> Aspect: @RequirePermission(WRITE_ALL) check Aspect -> Aspect: Verify user has WRITE_ALL authority Aspect --> Backend: Proceed Backend -> DocSvc: updateDocument(id, dto, file) DocSvc -> DocSvc: Resolve sender Person by ID DocSvc -> DocSvc: Resolve/create Tags DocSvc -> FileSvc: uploadFile(file, filename) FileSvc -> FileSvc: Generate key: documents/{UUID}_{filename} FileSvc -> MinIO: PutObject(bucket, key, stream) MinIO --> FileSvc: Success FileSvc --> DocSvc: S3 key DocSvc -> DB: UPDATE documents SET file_path=?, status='UPLOADED', ... DB --> DocSvc: OK DocSvc --> Backend: Updated Document entity Backend --> Frontend: 200 OK — Document JSON Frontend --> User: Refreshed document view @enduml