🔄 Diagrammes d’Ă©tats CV-builder
|
Note
|
📺 Diagrammes SVG de ce document
Documents liĂ©s : Cas d’utilisation · Diagramme de classes · Architecture backend |
Track Fonctionnel 2TUP — Phase 2 : Modèle dynamique
Les diagrammes d’Ă©tats complètent le modèle statique (classes) en dĂ©crivant comment les objets
à cycle de vie significatif transitionnent entre leurs états. Notation UML : état initial (●),
Ă©tat final (â—‰), transitions Ă©vĂ©nement( args ) / action, dĂ©lais after( … ).
Point important : le CvDocument backend ne possède aucun champ status — il n’existe pas de
statut DRAFT/PUBLISHED/ARCHIVED persistĂ© cĂ´tĂ© serveur (le statut affichĂ© dans l’Ă©cran liste est
purement visuel, côté interface). Les états modélisés ici sont donc des états observables :
prĂ©sence d’un currentCvId cĂ´tĂ© frontend, debounce d’autosave en attente, lastSavedAt,
shareEnabled en base.
Trois objets ont un cycle de vie significatif : le document CV (cvDocuments),
l'export PDF (processus navigateur) et le partage (shareToken/shareSlug/shareEnabled).
Cycle de vie du document CV
| De | Vers | Transition |
|---|---|---|
â—Ź initial |
Nouveau (non persisté) |
ouverture du builder — |
Nouveau |
Persisté |
wizard Clara / import PDF / import profil / premier autosave (UC01–UC03, UC19) |
Persisté |
Édité |
|
Édité |
Édité |
nouvelle frappe — réarme le debounce de 2 s ( |
Édité |
Enregistré |
|
Enregistré |
Édité |
|
Enregistré |
Snapshot de version |
|
Snapshot de version |
Enregistré |
|
Persisté / Enregistré |
Supprimé |
|
Supprimé |
â—‰ final |
immédiat — aucune restauration possible |
États de l’export PDF
L’export (UC11) est entièrement rĂ©alisĂ© par le navigateur : exportVectorPdf() prĂ©pare le rendu
(nextTick + requestAnimationFrame, composant CvPrintDocument téléporté dans body#cv-print-root,
règles @media print et @page A4 marge 12 mm) puis appelle window.print(). La boĂ®te d’impression
s’ouvre : l’utilisateur enregistre le PDF (vectoriel, texte sĂ©lectionnable — Ă©vĂ©nement Plausible
cv_exported) ou annule et revient Ă l’aperçu. Il n’existe aucun Ă©tat serveur : l’endpoint
POST /api/v1/cvs/{id}/export rĂ©pond 501 NOT_IMPLEMENTED et aucun PDF n’est stockĂ© cĂ´tĂ© backend.
États du partage
Le shareToken (UUID) existe dès la crĂ©ation du document ; c’est le boolĂ©en shareEnabled
(dĂ©faut false) qui gouverne l’accès public. Deux Ă©tats seulement :
| État | Description |
|---|---|
Partage désactivé (défaut) |
|
Partage activé |
|
Transitions : activation/dĂ©sactivation par PUT /cv-documents/{id}/share (UC12) — rĂ©versibles Ă
volontĂ©, le token restant identique. Sur l’Ă©tat activĂ©, la mise Ă jour du slug est validĂ©e par la
regex ^[a-z0-9][a-z0-9-]{1,58}[a-z0-9]$ et renvoie 409 CONFLICT si le slug est déjà pris.
Il n’y a ni expiration, ni rĂ©vocation par date, ni mot de passe, ni compteur de vues.
Sync Gate — Cohérence statique ↔ dynamique
-
Les états du document CV ne correspondent à aucun champ
status: ils reflètentcurrentCvId, le debounce d’autosave etlastSavedAtdu storeuseCvBuilderStore, cĂ´tĂ© frontend, et les champs rĂ©els deCvDocument(shareEnabled,updatedAt) du modèle de classes. -
Chaque transition serveur est portĂ©e par un service documentĂ© dans l’architecture backend (
CvDocumentService,CvVersionService,CvShareService). -
Aucune transition automatique planifiĂ©e cĂ´tĂ© serveur : la seule Ă©chĂ©ance temporelle est le debounce de 2 s du frontend (UC19) ; la rotation FIFO des versions (max 10) s’applique de façon synchrone Ă chaque
créerVersion.
Verdict : modèle dynamique alignĂ© avec le code rĂ©el et les 19 cas d’utilisation — validĂ©.