đź”— Diagrammes de communication CV-builder
|
Note
|
📺 Diagrammes SVG de ce document
Documents liĂ©s : Diagrammes de sĂ©quences · Diagrammes d’Ă©tats · Diagramme de classes |
Track Fonctionnel 2TUP — Phase 2 : Modèle dynamique
Le diagramme de communication (ex-diagramme de collaboration) est la vue duale du diagramme de sĂ©quence : il montre les mĂŞmes messages, mais organisĂ©s autour de la structure des liens entre participants plutĂ´t que le long de l’axe du temps. Notation UML :
-
participants en rectangles
: Classe(composant Vue, composable, service Spring, collection MongoDB) -
messages numérotés (
1.,2.,3.…) le long des liens, la flèche indiquant le sens d’envoi -
retours en pointillés (ex.
lastSavedAt) -
les frontières navigateur / backend sont matérialisées quand la collaboration les traverse
Les trois collaborations documentées ici reflètent le code réel : deux sont 100 % côté navigateur (export PDF, score & conseils) et une seule traverse le backend (sauvegarde automatique).
Sauvegarde automatique (UC19)
Contexte : il n’existe ni timer 30 s, ni brouillon sĂ©parĂ©, ni IndexedDB. L’autosave est un
watchDebounced de 2 secondes (deep) posé sur store.cvData dans CvWorkspaceView, actif
uniquement si currentCvId est défini ; les actions IA validées dans le chat Clara déclenchent
en plus des appels impératifs à autoSave().
| Participant | RĂ´le |
|---|---|
|
8 formulaires de section + actions du chat Clara — mutent |
|
store Pinia unique — détient |
|
héberge le |
|
endpoint REST |
|
service applicatif — contrĂ´le d’ownership ( |
|
isole le |
|
collection persistant l’intĂ©gralitĂ© du CV (champ |
Liens numérotés :
-
mutation cvData— un formulaire de section ou une action IA validée modifie le store -
watchDebounced( 2 s, deep )—CvWorkspaceViewobservestore.cvDataet se dĂ©clenche après 2 s d’inactivitĂ© -
store.autoSave( )— upsert complet du document courant -
PUT /api/v1/cv-documents/{id}— appel axios (ouPOST /cv-documentssi le CV n’a pas encore d’id) -
CvDocumentService.update( )— vĂ©rification d’ownership (userId≠→DomainException« Not authorized ») -
adapter → boundedElastic— le repository Mongo bloquant est exécuté hors event-loop Netty -
upsert cvDocuments— écriture MongoDB, puis retour pointilléCvDocumentResponse→ mise à jour delastSavedAt
Lecture : toute mutation de cvData (1) est absorbĂ©e par le debounce de 2 s (2) ; l’upsert
(3-7) traverse la frontière HTTPS/JWT une seule fois, et le retour lastSavedAt alimente
l’indicateur « EnregistrĂ© » de l’Ă©diteur. accentColor et selectedTemplate ne sont pas
surveillés par ce watcher.
Export PDF (UC11)
Contexte : l’export PDF est entièrement rĂ©alisĂ© dans le navigateur — PDF vectoriel produit
par la boĂ®te d’impression via window.print(). Aucun PDF n’est gĂ©nĂ©rĂ© ni stockĂ© cĂ´tĂ© serveur :
l’endpoint REST exportCv rĂ©pond 501 NOT_IMPLEMENTED. Le chemin raster
html2canvas-pro + jsPDF est présent dans le code mais jamais appelé.
| Participant | RĂ´le |
|---|---|
|
clique sur le bouton « Exporter » |
|
panneau d’aperçu de l’Ă©diteur — porte le bouton d’export |
|
composable — orchestre |
|
moteur d’impression du navigateur ( |
|
rendu d’impression tĂ©lĂ©portĂ© dans |
|
analytics — reçoit l’Ă©vĂ©nement |
Liens numérotés :
-
clic « Exporter »— depuisEditorPreviewPanel -
exportVectorPdf( )— appel du composable -
nextTick( ) / requestAnimationFrame— attente que le DOM d’impression soit rendu -
window.print( )— ouverture de la boĂ®te d’impression -
rendu CvPrintDocument— mise en page@media print(A4, marges 12 mm,break-inside: avoid) -
dialogue « Enregistrer en PDF »— le candidat nomme et enregistre le fichier + l’Ă©vĂ©nement Plausiblecv_exportedest Ă©mis en parallèle.
Lecture : la collaboration ne comporte aucun lien vers le backend — le pivot est
window : le composable lui dĂ©lègue l’impression (4), le navigateur rend CvPrintDocument (5)
puis rend la main au candidat via le dialogue système (6).
Score & conseils (UC18)
Contexte : il n’existe pas de « validation mĂ©tier » bloquante (aucun champ required,
aucun CVValidator). L’Ă©cran ATS calcule un score de complĂ©tude et un score ATS
purement côté client via le composable useCvScoring — aucun appel réseau.
| Participant | RĂ´le |
|---|---|
|
ouvre l’Ă©cran score ( |
|
Ă©cran d’affichage — jauge, score ATS, conseils |
|
composable de notation ( |
|
source de vérité — |
Liens numérotés :
-
ouverture ?screen=ats— navigation interne par query param versCvAtsScreen -
useCvScoring( )— l’Ă©cran instancie lescomputedde notation -
lecture cvData— accès réactif au store (recalcul automatique à chaque mutation) -
notation 8 sections /10— complétude par section, agrégée en pourcentage -
bonus ATS— bonus fixes (nom 15, titre 10, email 10, résumé > 50 c. 15, ≥ 1 exp 20, ≥ 1 formation 10, ≥ 3 compétences 15, ≥ 1 langue 5) -
détection 12 clichés— repérage de formules toutes faites codées en dur -
affichage jauge + tips— retour pointillĂ© vers l’Ă©cran : jauge, score ATS, conseils contextuels
Lecture : collaboration 100 % client : la notation (4-6) est une chaîne de computed
internes au composable, recalculĂ©e Ă chaque modification de cvData (3) ; rien n’est persistĂ©
et rien ne bloque l’export ou le partage.
Sync Gate — Cohérence avec les autres modèles
-
Mêmes messages que les diagrammes de séquences correspondants — seule la présentation change (structure des liens vs axe du temps)
-
Chaque participant est une classe, un composant ou un composable du modèle statique, et chaque lien matĂ©rialise une dĂ©pendance documentĂ©e dans l’architecture backend
-
Frontières respectĂ©es : UC11 et UC18 restent dans le navigateur ; UC19 est la seule collaboration qui traverse HTTPS/JWT jusqu’Ă MongoDB (via
boundedElastic)
Verdict : vues séquence et communication cohérentes entre elles et avec le code réel — validé.