🔄 Diagrammes de Séquences — CV-Builder ClaraJob
Phase 2 (Analysis) — Two-Track Unified Process (2TUP)
|
Note
|
📺 Diagrammes de Séquences UML
Documents liĂ©s : Cas d’utilisation · Classes · Composants |
Vue d’ensemble
Les diagrammes de séquences illustrent les interactions dynamiques réellement implémentées entre le frontend Vue 3 (composants, composables, store Pinia cvBuilderStore) et le backend Spring WebFlux (controllers, services applicatifs, MongoDB). Ils montrent :
-
Acteurs/Participants : Candidat ou Visiteur, composants Vue, services HTTP frontend, controllers et services backend, MongoDB, IA générative (GeminiClient)
-
Lignes de vie : parcours temporel de chaque participant
-
Messages numĂ©rotĂ©s : appels de mĂ©thodes et requĂŞtes HTTP rĂ©elles (chemins d’API exacts)
-
BoĂ®tes d’exĂ©cution : durĂ©e d’activitĂ© de chaque composant
-
Flux de retour (pointillés) : données retournées aux appelants
📊 Diagramme UC01–UC02 : Création par le wizard Clara et import PDF
UC01 — Création par le wizard Clara (ScratchWizardModal) :
-
Le Candidat choisit secteur, niveau d’expĂ©rience, ton (et texte libre optionnel) puis clique « GĂ©nĂ©rer »
-
ScratchWizardModal appelle
generateFullCv()du service frontendcvAiService -
RequĂŞte
POST /ai/generate-cvvers AiController -
CvGenerationService.generateFullCv(sector, level, tone, freeText) construit le prompt (schéma JSON strict des 8 sections)
-
GeminiClient (
AiClient.generateJson) appelle l’API Gemini en mode JSON -
Le JSON retourné est parsé en
Map— échec de parsing → 502, quota IA dépassé → 429 -
Le résultat alimente
store.cvData: l’Ă©diteur s’ouvre prĂ©-rempli ; la première sauvegarde automatique crĂ©era le document en base
UC02 — Import d’un CV PDF (CvInitScreen2) :
-
Le Candidat dépose son PDF →
POST /files/upload(multipart) stocke le fichier dans MinIO et retourne unobjectKey -
POST /cv-documents/import-pdf { fileKey }→ CvImportService.importFromPdf(userId, fileKey) -
Le service télécharge le fichier depuis MinIO puis extrait le texte avec Apache PDFBox (
PdfTextExtractor, exécuté sur le schedulerboundedElastic) -
AiClient.generateJson(prompt de structuration, texte)transforme le texte brut en JSON structuré (identité, expériences, formation, compétences…) -
CvDocument.create(…)est sauvegardĂ© dans MongoDB (cv_documents) → retourCvDocumentResponse, l’Ă©diteur s’ouvre prĂ©-rempli
📊 Diagramme UC06–UC07 : Édition du contenu et réorganisation des sections
UC06 — Édition du contenu :
-
Le Candidat saisit un champ dans un des formulaires des 8 sections (identité, résumé, expériences, formation, compétences, langues, projets, certifications)
-
Le formulaire mute directement
store.cvData(Pinia) -
Dans CvWorkspaceView,
watchDebounced(() ⇒ store.cvData, …, { debounce: 2000, deep: true })observe le store -
Après 2 s sans frappe, le watcher appelle
store.autoSave()(uniquement sicurrentCvIdest défini) -
autoSave→useCvPersistence.saveCv→updateCvDocument→PUT /api/v1/cv-documents/{id} -
CvDocumentService.update contrôle le propriétaire puis
doc.update(…)(incrĂ©mentupdatedAt) -
CvDocumentRepositoryAdapter persiste dans MongoDB (
cv_documents) via le schedulerboundedElastic -
Retour
CvDocumentResponse→store.lastSavedAtmis Ă jour → indicateur « EnregistrĂ© » dans l’en-tĂŞte
UC07 — Réorganisation / masquage des sections :
-
Le Candidat glisse-dépose une section (sortablejs dans
SectionOrderControl) ou clique l’icĂ´ne de visibilitĂ© (SectionVisibilityControl) -
Appel de
store.setSectionOrder(order)(→cvData.sectionOrder) oustore.toggleSectionVisibility(section)(→cvData.hiddenSections) -
La mutation de
cvDataemprunte exactement le même chemin de persistance que UC06 :watchDebounced2 s →autoSave→PUT /cv-documents/{id}→ MongoDB
📊 Diagramme UC12–UC13 : Activation du partage et consultation publique
UC12 — Activer le partage (SharePanel) :
-
Le Candidat active le partage (slug personnalisé optionnel)
-
PUT /cv-documents/{id}/share { enabled, slug }→ CvShareService.updateShare -
Contrôle du propriétaire, puis
doc.enableSharing()—shareEnabled = true; le token UUID existe déjà (généré à la création du document) -
Si un slug est fourni :
existsByShareSlug— s’il est pris par un autre CV → 409 Conflict ; sinondoc.updateSlug(slug)(format^[a-z0-9][a-z0-9-]{1,58}[a-z0-9]$) -
Sauvegarde MongoDB → retour
CvShareResponse { enabled, token, slug, urls publiques }→ le lien/cv/{token}(ou/cv/{slug}) est affiché et copiable
UC13 — Consultation publique (CvPublicView) :
-
Un Visiteur (sans compte) ouvre l’URL
/cv/:token— route frontend publique -
cvShareService.getPublictenteGET /cv-documents/shared/{token}(endpoint public, sans authentification) -
En cas de 404, repli automatique sur
GET /cv-documents/shared/s/{slug} -
Backend :
findByShareToken/findByShareSlug+ filtreshareEnabled— sinon 404 -
Retour
CvPublicResponse(data, templateLayout, accentColor, fontFamily, spacing, showBadge)→ rendu du CV en lecture seule ; si introuvable ou partage désactivé → page « CV introuvable »
📊 Diagramme UC15–UC16 : Adaptation à une offre et chat Clara
UC15 — Adaptation à une offre (CvAdaptScreen) :
-
Le Candidat colle le texte de l’offre puis clique « Analyser »
-
matchCvToOffer(cvText, offerText)→POST /cv/match -
CvMatcherService.match est purement algorithmique (aucun appel IA) : normalisation des accents, filtrage des stop-words FR/EN, mots ≥ 3 caractères, score = mots-clĂ©s de l’offre prĂ©sents dans le CV
-
Retour
CvMatchResponse { score %, matched[], missing[], suggestions[] }→ affichage du score et des mots-clés présents/manquants -
« Créer un variant » →
POST /cv-documents/{id}/variants { name, matchScore }→ CvVariantService.create → MongoDB — le CV master reste intact
UC16 — Chat Clara (AiCoachTab + useAiChat) :
-
Le Candidat envoie un message →
useAiChat.sendMessage(text) -
POST /ai/chat { message, cvData, conversationHistory }→ CvChatService.chat -
Le service construit un prompt système incluant le CV actuel et le catalogue d’actions (
update_identity,set_experiences,set_full_cv…) puis appelle GeminiClient en mode JSON -
Réponse
{ message, actions[] }: les actions informatives (suggest,score,recommend_template) sont exécutées immédiatement ; les actions modifiantes sont proposées sous forme de boutons « Appliquer » / « Tout appliquer » — validation utilisateur obligatoire -
Au clic,
executeActionprend d’abord un snapshot d’annulation (cvSnapshotManager+undoStack) puis mutestore.cvData -
store.autoSave()persiste immédiatement viaPUT /cv-documents/{id}
🔗 Légende UML - Diagrammes de Séquences
| Élément | Signification |
|---|---|
Participant |
Rectangle en haut du diagramme (Candidat/Visiteur, composant Vue, service, controller, MongoDB) |
Ligne de vie |
Ligne pointillée verticale (durée de vie du participant) |
Flèche pleine |
Appel synchrone (méthode ou requête HTTP) |
Flèche pointillée |
Retour de valeur / réponse HTTP |
BoĂ®te d’exĂ©cution |
Rectangle sur la ligne de vie (activité en cours) |
Message numéroté |
Ordre chronologique de l’interaction |
Auto-message |
Traitement interne (debounce, parsing, extraction PDFBox…) |
Note |
Branche conditionnelle (409 slug pris, 404 partage désactivé, repli slug…) |
✅ SYNC GATE 2 : Validation Dynamique ↔ Architecture
| UC | Séquence Métier | Composants Techniques |
|---|---|---|
UC01–02 |
Wizard IA / Import PDF → CV pré-rempli |
ScratchWizardModal / CvInitScreen2 → AiController / CvDocumentController → CvGenerationService / CvImportService (PDFBox + AiClient) → MongoDB |
UC06–07 |
Édition & réorganisation → persistance débouncée |
Formulaires + sortablejs → cvBuilderStore → watchDebounced 2 s → PUT /cv-documents/{id} → CvDocumentService → adapter boundedElastic → MongoDB |
UC12–13 |
Activation du partage → consultation publique |
SharePanel → CvShareService (token UUID / slug 409) → GET public par token, repli slug → CvPublicView |
UC15–16 |
Matching algorithmique + coach IA avec validation |
CvMatcherService (sans IA) + CvVariantService · CvChatService → GeminiClient → actions validées → snapshot undo → autoSave |
Verdict Sync Gate 2 : âś… APPROUVÉ — chaque sĂ©quence correspond au code effectif (chemins d’API, services et composants vĂ©rifiĂ©s dans clarajob-front-api et clarajob-front-gui).
📊 Résumé Statistique
| Métriques | Valeurs |
|---|---|
Diagrammes de Séquences |
4 (UC01–02, UC06–07, UC12–13, UC15–16) |
Participants |
6 Ă 7 par diagramme |
Interactions |
8 à 13 messages par séquence |
Endpoints couverts |
/ai/generate-cv, /files/upload, /cv-documents/import-pdf, /cv-documents/{id}, /cv-documents/{id}/share, /cv-documents/shared/{token}, /cv-documents/shared/s/{slug}, /cv/match, /cv-documents/{id}/variants, /ai/chat |
Patterns |
Synchrone (HTTP), débouncé (autosave 2 s), validation utilisateur (actions IA), repli (token → slug) |