Ciclul de viață al documentului
Acest conținut nu este încă disponibil în limba selectată.
Documentele nu sunt niciodată șterse fizic (tombstone). Tranzițiile sunt impuse în service/arhiva/DocumentLifecycleService și scriu câte un EvenimentDocument.
stateDiagram-v2 [*] --> ACTIV: upload / create ACTIV --> ARHIVAT: arhiveaza (gzip binar) ARHIVAT --> ACTIV: restore (gunzip) ACTIV --> STERS: delete (soft) + stersLa STERS --> ACTIV: restore STERS --> STERS: purge (șterge binarul,<br/>storageUri=null, rândul rămâne) ARHIVAT --> STERS: delete STERS --> [*]: (rând + audit păstrate permanent)Tranziții
Section titled “Tranziții”| Acțiune | Endpoint | Efect |
|---|---|---|
| Upload | POST /api/documents/upload | creează ACTIV, stochează binarul în bucket, CREAT |
| Arhivează | POST /api/documents/{id}/arhiveaza | ARHIVAT + arhivatLa, gzip binarul, ARHIVAT |
| Restaurează | POST /api/documents/{id}/restore | din STERS sau ARHIVAT → ACTIV (dezarhivează/decomprimă) |
| Șterge (coș) | DELETE /api/documents/{id} | soft → STERS + stersLa (restaurabil 30 zile) |
| Purjează | POST /api/documents/{id}/purge | șterge binarul + storageUri=null (tombstone; rândul + jurnalul rămân permanent) |
Automatizare
Section titled “Automatizare”service/scheduled/DocumentMaintenanceJobs — @Scheduled zilnic: auto-arhivează documentele ACTIV expirate + auto-purjează coșul mai vechi de 30 zile. Manual: POST /api/admin/maintenance/run (admin).
Livrare binar
Section titled “Livrare binar”service/arhiva/DocumentBinaryService.readForDelivery aplică în ordine inversă: gunzip (dacă arhivat, detectat prin magic-bytes 0x1f8b) → decriptare AES (dacă CRIPTAT). Citește din bucket-ul fizic al documentului (StorageTarget, bring-your-own).
Versionarea conținutului
Section titled “Versionarea conținutului”Ortogonală față de ciclul de viață (statut): un document poate avea mai multe versiuni de conținut, dar un singur statut. Document.storageUri indică mereu versiunea curentă; versiunile anterioare sunt păstrate în versiune_document cu chei versionate (uploads/<cod>/v<n> — fără suprascriere). „Încărcare versiune nouă” înlocuiește conținutul curent + scrie EvenimentDocument(MODIFICAT); restaurarea unei versiuni vechi e forward-only (creează o versiune nouă cu acel conținut + EvenimentDocument(RESTAURAT)), deci download-ul, căutarea și auditul rămân consistente. Detalii + endpoint-uri: secțiunea Versionare din API Reference. Serviciu: service/versiune/DocumentVersionService.