⚙️ Diagrammes d’activité CV-builder

Note

📺 Diagrammes SVG de ce document

Track Fonctionnel 2TUP — Phase 2 : Modèle dynamique

Les diagrammes d’activité décrivent l’enchaînement des actions au sein des cas d’utilisation. Notation UML : début (●), fin (◉), activités en rectangles arrondis, décisions en losanges avec gardes [ condition ] / else.

Les participants correspondent aux responsabilités identifiées dans l’architecture : Candidat (acteur), Frontend Vue 3 (SPA), Backend WebFlux, IA Gemini/Groq (système externe). Il n’existe ni worker PDF ni scheduler : l’export est réalisé par le navigateur et la sauvegarde automatique est pilotée par un debounce frontend.

Création et édition d’un CV

Diagramme d’activité - Création et édition d’un CV

Lecture du flux :

  1. Trois chemins de création réels, au choix du candidat :

    • Wizard Clara (UC01) — 3 étapes secteur / niveau d’expérience / ton, puis POST /api/v1/ai/generate-cv (CvGenerationService → Gemini/Groq, 8192 tokens) qui renvoie un JSON de CV complet

  2. * Import PDF (UC02) — sélection d’un PDF (60 Mo max), upload MinIO (resumes/{userId}/…), puis POST /cv-documents/import-pdf : extraction texte PDFBox et structuration par IA (generateJson, 120k tokens, normalisation des données importées)

  3. * Import du profil ClaraJob (UC03) — POST /cv-documents/import-profile : identité, résumé et compétences construits depuis User/UserSkill, avec merge du PDF du profil si présent

  4. Les trois chemins convergent : le CV est persisté (cvDocuments) et chargé dans le store (cvData, currentCvId)

  5. Boucle d’édition : 8 sections + sections personnalisées (UC06–UC07, réordonnancement sortablejs, masquage hiddenSections), assistée par le RichTextEditor TipTap avec IA Reformuler / Générer (UC17, cooldown 5 s, le contenu n’est jamais écrasé en cas d’échec)

  6. L’aperçu live se met à jour (watchDebounced 300 ms) et la sauvegarde automatique tourne en tâche de fond (UC19) ; tant que le candidat continue, la boucle reprend, sinon le flux se termine

Export PDF et partage

Diagramme d’activité - Export PDF et partage

Lecture du flux :

  1. Le candidat ouvre l’aperçu paginé A4 (UC10, CvPagedPreview 595×842, zoom desktop/mobile)

  2. Export (UC11) : préparation du rendu (nextTick + requestAnimationFrame, CvPrintDocument en @media print), puis window.print() — décision du navigateur : l’utilisateur enregistre le PDF vectoriel (événement Plausible cv_exported) ou annule et revient à l’aperçu

  3. Partage (UC12) : activation par PUT /cv-documents/{id}/share ; slug optionnel validé par regex (409 CONFLICT si déjà pris → correction et nouvel essai)

  4. L’URL publique /cv/:token (et /shared/s/{slug} si slug) est copiable ; le visiteur consulte le CV public via CvPublicView (UC13)

Sauvegarde automatique (UC19)

Diagramme d’activité - Sauvegarde automatique

Lecture du flux :

  1. Toute modification de cvData déclenche le deep watch (watchDebounced(() ⇒ store.cvData, …, { debounce: 2000, deep: true }) dans CvWorkspaceView) ; chaque nouvelle frappe réarme le délai de 2 s

  2. Les actions IA validées dans le chat Clara (UC16) court-circuitent le délai : autoSave() est appelé immédiatement après application au store

  3. Décision currentCvId défini ? : si [ non ], POST /cv-documents crée le document (premier enregistrement, shareToken UUID généré, id mémorisé) ; si [ oui ], PUT /cv-documents/{id} réalise un upsert complet (nom, template, couleurs, data)

  4. lastSavedAt est mis à jour et l’indicateur « Enregistré à HH:MM » s’affiche ; le cycle reprend tant que l’éditeur est ouvert

Il n’y a pas de timer 30 s, pas d’IndexedDB, pas de retry automatique : en cas d’échec réseau, la prochaine modification relance simplement le cycle. Le watch n’observe ni accentColor ni selectedTemplate (sauvegardés lors du prochain autoSave() déclenché par cvData).

Sync Gate — Cohérence avec les autres modèles

  • Chaque participant est un composant du modèle technique : Frontend Vue 3 (store useCvBuilderStore, services axios), Backend WebFlux (CvDocumentService, CvImportService, CvGenerationService), IA Gemini/Groq (GeminiClient)

  • Les décisions [ 409 ], [ annule ], [ non ] reprennent les flux d’exception des fiches de cas d’utilisation

  • Les activités de sauvegarde, d’export et de partage déclenchent les transitions des diagrammes d’états (Édité → Enregistré, Prêt → Boîte d’impression, Partage désactivé ⇄ activé)

Verdict : les flux d’activité couvrent les scénarios nominaux et d’exception des UC principaux — validé.