🔌 Diagramme de Composants — CV-Builder ClaraJob

Phase 2 (Analysis) — Two-Track Unified Process (2TUP)

Note

📺 Diagrammes de ce document


Vue d’ensemble

Le diagramme de composants du CV-Builder reflète le code réel des deux modules clarajob-front-gui (SPA Vue 3) et clarajob-front-api (Spring Boot WebFlux) :

Frontend (Vue 3 / Pinia) : 1 vue orchestratrice (CvWorkspaceView, route /cv-builder) + 1 vue publique (CvPublicView, route /cv/:token), 16 écrans, 1 store Pinia (cvBuilderStore), 7 services API, 4 composables, 1 gestionnaire de snapshots local.

Backend (Spring Boot WebFlux) : 4 controllers, 11 services applicatifs, 6 ports de domaine rĂ©alisĂ©s par 7 adapters d’infrastructure (Spring Data MongoDB, R2DBC/PostgreSQL, Redis, WebClient IA, MinIO S3).

Systèmes externes : Keycloak (JWT), MinIO (S3), Redis, API IA Gemini ou Groq, PostgreSQL, MongoDB.

Interface : REST API spec-first (OpenAPI) — contrats /api/v1/cv-documents/*, /api/cv/{cvId}/design, /api/v1/ai/, /api/v1/cv/match.


📊 Diagramme UML Complet

Diagramme de composants — Frontend + Backend + Systèmes externes

Lecture du diagramme :

  • Gauche (Frontend) : SPA Vue 3 — vue orchestratrice, Ă©crans, store, services API

  • Milieu (Backend) : Controllers WebFlux → services applicatifs → ports/adapters

  • Droite (DonnĂ©es & externes) : MongoDB, PostgreSQL, Redis, MinIO, Keycloak, API IA

  • Flèches : dĂ©pendances et flux d’appel rĂ©els


đź“‹ Catalogue des Composants

Backend Components (clarajob-front-api)

Controllers (Présentation) — 4
Composant Responsabilité & Interfaces

CvDocumentController

ImplĂ©mente l’interface gĂ©nĂ©rĂ©e CvsApi (OpenAPI spec-first)
Fourni : CRUD /api/v1/cv-documents, imports (/import-profile, /import-pdf, /import/text), versions, restore, partage (token/slug), variantes, config admin
Consomme : CvDocumentService, CvImportService, CvShareService, CvVersionService, CvVariantService

CvDesignController

RĂ©glages de design d’un CV (layout, thème, couleur d’accent, direction)
Fourni : GET/PUT/DELETE /api/cv/{cvId}/design
Consomme : CvDesignApplicationService

AiController

Implémente AiApi — fonctions IA du builder
Fourni : POST /api/v1/ai/reformulate, /generate-cv, /generate-section, /chat, /detect-skills
Consomme : AiService, CvGenerationService, CvChatService, AiUsageQuotaResolver

CvMatcherController

Implémente CvMatchingApi — score de correspondance CV ↔ offre
Fourni : POST /api/v1/cv/match
Consomme : CvMatcherService

Services (Application) — 11
Composant Responsabilité & Dépendances

CvDocumentService

CRUD des documents CV (création, liste me, lecture, mise à jour, suppression)
Consomme : CvDocumentRepository (MongoDB)

CvVersionService

Historique de versions : création, liste, restauration, suppression ; plafond configurable (cv-builder.max-versions-per-cv, défaut 10)
Consomme : CvDocumentVersionRepository, CvDocumentRepository, AppConfigRepository

CvVariantService

Variantes d’un CV maĂ®tre ciblĂ©es par offre (JobOfferReference)
Consomme : CvVariantRepository, CvDocumentRepository

CvShareService

Partage public : activation, token, slug personnalisé, lecture publique
Consomme : CvDocumentRepository (findByShareToken, findByShareSlug)

CvImportService

Import de CV : depuis le profil (resume MinIO), depuis un PDF (PdfTextExtractor), depuis un texte brut ; structuration du contenu par l’IA
Consomme : FileStorageService (MinIO), AiClient, CvDocumentRepository

CvDesignApplicationService

Lecture/écriture des réglages de design
Consomme : CvDesignSettingsRepository (PostgreSQL, table cv_design_settings)

AiService

Reformulation de texte, détection de compétences
Consomme : AiClient

CvGenerationService

Génération IA : CV complet (generateFullCv) et section (generateSection)
Consomme : AiClient

CvChatService

Chat Clara : conversation contextualisée par les données du CV
Consomme : AiClient

AiUsageQuotaResolver

Résolution des quotas IA par tier utilisateur
Consomme : AiUsageQuotaPort (Redis)

CvMatcherService

Matching CV ↔ offre par extraction de mots-clés (normalisation, stop-words) — sans appel IA
Consomme : aucun port externe (calcul en mémoire)

Ports & Adapters (Domaine / Infrastructure)
Port (domaine) Adapter (infrastructure) & Store

CvDocumentRepository

CvDocumentRepositoryAdapter → MongoCvDocumentRepository — collection MongoDB cvDocuments

CvDocumentVersionRepository

CvDocumentVersionRepositoryAdapter → MongoCvDocumentVersionRepository — collection cvDocumentVersions

CvVariantRepository

CvVariantRepositoryAdapter → MongoCvVariantRepository — collection cvVariants

CvDesignSettingsRepository

CvDesignSettingsRepositoryImpl → R2dbcCvDesignSettingsRepository — table PostgreSQL cv_design_settings

AiClient

GeminiClient (WebClient) — API Gemini (generativelanguage.googleapis.com) ou Groq (/openai/v1/chat/completions) selon AI_PROVIDER

AiUsageQuotaPort

AiUsageQuotaRedisAdapter — compteurs de quotas IA dans Redis

— (Spring Data direct)

AppConfigRepository — collection MongoDB appConfig (clé cv-builder.max-versions-per-cv)

— (service partagé)

FileStorageService — MinIO S3, bucket clarajob, préfixe resumes/{userId}/


Frontend Components (clarajob-front-gui)

Vues & Écrans
Composant Responsabilité & Navigation

CvWorkspaceView

Vue orchestratrice de la route /cv-builder (auth requise) ; pilote la navigation entre écrans via cvBuilderStore.currentStep ; auto-save : debounce 2 s sur cvData quand un CV est chargé
Consomme : cvBuilderStore, les 16 écrans

CvPublicView

Route publique /cv/:token — affichage lecture seule d’un CV partagĂ©
Consomme : cvShareService (endpoints publics shared/{token}, shared/s/{slug})

16 écrans (screens/)

CvInitScreen2, CvListScreen, CvTemplatesScreen, CvWorkspaceScreen, CvDesignRefactoredScreen, CvPreviewScreen, CvAiCoachScreen, CvAtsScreen, CvAdaptScreen, CvInterviewScreen, CvCollabScreen, CvShareScreen, CvVersionsScreen, CvExtrasScreen, CvAdminScreen, CvPublicScreen

Store & Composables
Composant Responsabilité

cvBuilderStore (Pinia)

État global : cvData, currentStep, activeTab, selectedTemplate, accentColor, designDirection/Layout/Theme, currentCvId, savedCvs, lastSavedAt
Actions : autoSave(), createNewCv(), loadExistingCv(), loadSavedCvs()
Consomme : useCvPersistence

useCvPersistence

Persistance des CV : backend (cvDocumentService) si authentifié, sinon repli localStorage (clarajob_cvs)

useCvTemplates

Catalogue des templates/layouts de CV (composants CvLayout*.vue, rendus côté client)

useCvScoring

Score de complétude/qualité du CV, calculé côté client

useCvVectorExport

Export PDF côté navigateur : html2canvas-pro + jsPDF, ou impression (window.print()) — aucun PDF généré côté serveur

CvSnapshotManager (cvSnapshot.ts)

Undo local : jusqu’Ă  20 snapshots de cvData en mĂ©moire par CV

API Service Components (Client HTTP) — 7
Composant Responsabilité & Endpoints Appelés

cvDocumentService

CRUD documents : POST /cv-documents, GET /cv-documents/me, GET/PUT/DELETE /cv-documents/{id}, imports /import-pdf, /import-profile

cvVersionService

Versions : GET/POST /cv-documents/{id}/versions, POST …​/{versionId}/restore, DELETE …​/{versionId} ; config admin GET/PUT /cv-documents/admin/config

cvShareService

Partage : PUT /cv-documents/{id}/share, GET /cv-documents/{id}/share-status, lecture publique GET /cv-documents/shared/{token} et /shared/s/{slug}

variantService

Variantes : GET/POST /cv-documents/{id}/variants, GET/PUT/DELETE /cv-documents/{id}/variants/{vid}

cvAiService

Génération IA : POST /ai/generate-cv, POST /ai/generate-section ; matching POST /cv/match

aiService

Reformulation POST /ai/reformulate, détection de compétences POST /ai/detect-skills (chat Clara via chatService → POST /ai/chat)

skillService

Référentiel de compétences : recherche et création (autocomplete du formulaire compétences)

Tous ces services passent par le client HTTP partagé httpClient (JWT Keycloak injecté par intercepteur).


đź”— Interfaces & Contrats

REST API réelle (OpenAPI spec-first)

Endpoint Méthode Usage

/api/v1/cv-documents

POST

Créer un document CV

/api/v1/cv-documents/me

GET

Lister mes CV

/api/v1/cv-documents/{id}

GET / PUT / DELETE

Lire, sauvegarder (auto-save), supprimer

/api/v1/cv-documents/import-profile

POST

Importer depuis le CV du profil (MinIO + IA)

/api/v1/cv-documents/import-pdf

POST

Importer depuis un PDF uploadé (extraction + IA)

/api/v1/cv-documents/import/text

POST

Importer depuis un texte brut (IA)

/api/v1/cv-documents/{id}/versions

GET / POST

Lister / créer une version

/api/v1/cv-documents/{id}/versions/{versionId}/restore

POST

Restaurer une version

/api/v1/cv-documents/{id}/versions/{versionId}

DELETE

Supprimer une version

/api/v1/cv-documents/{id}/share

PUT

Activer/configurer le partage (token, slug)

/api/v1/cv-documents/{id}/share-status

GET

Statut de partage

/api/v1/cv-documents/shared/{token}

GET

Public — CV partagé par token

/api/v1/cv-documents/shared/s/{slug}

GET

Public — CV partagé par slug

/api/v1/cv-documents/{id}/variants

GET / POST

Variantes par offre

/api/v1/cv-documents/admin/config

GET / PUT

Config admin (max versions)

/api/cv/{cvId}/design

GET / PUT / DELETE

Réglages de design (PostgreSQL)

/api/v1/ai/reformulate

POST

Reformulation IA

/api/v1/ai/generate-cv

POST

Génération de CV complet

/api/v1/ai/generate-section

POST

GĂ©nĂ©ration d’une section

/api/v1/ai/chat

POST

Chat Clara

/api/v1/ai/detect-skills

POST

Détection de compétences

/api/v1/cv/match

POST

Score de matching CV ↔ offre (mots-clés)

Les endpoints GET /api/v1/cv-documents/shared/** sont en permitAll dans SecurityConfig ; tous les autres exigent un JWT Keycloak.

Component Interface Ports

Backend Ports

Provided Interfaces (ce qu’offre le backend) : - CvsApi (gĂ©nĂ©rĂ©e OpenAPI) : documents, versions, variantes, partage, imports, config admin - AiApi : reformulate, generate-cv, generate-section, chat, detect-skills - CvMatchingApi : match CV ↔ offre - API design : /api/cv/{cvId}/design

Required Interfaces (ce que consomme le backend) : - Spring Data MongoDB : collections cvDocuments, cvDocumentVersions, cvVariants, appConfig - R2DBC : table PostgreSQL cv_design_settings (le rĂ©fĂ©rentiel users/resumes reste en PostgreSQL) - FileStorage : MinIO (S3), bucket clarajob — lecture des CV uploadĂ©s pour l’import - AiClient : API Gemini ou Groq (HTTPS, provider selon AI_PROVIDER) - CacheProvider : Redis — quotas IA - Keycloak : validation JWT (JWKS)

Frontend Ports

Provided Interfaces (ce qu’offre le frontend) : - /cv-builder : atelier complet (Ă©dition, design, IA, versions, variantes, partage, export) - /cv/:token : consultation publique d’un CV partagĂ©

Required Interfaces (ce que consomme le frontend) : - BackendRESTAPI : endpoints listĂ©s ci-dessus via httpClient (JWT) - LocalStorage : repli hors connexion (clarajob_cvs) + snapshots undo en mĂ©moire - BrowserAPIs : html2canvas-pro/jsPDF et window.print() pour l’export PDF cĂ´tĂ© navigateur


✅ SYNC GATE 2 : Traçabilité des flux réels

Fonctionnalité Chemin Backend Chemin Frontend

Créer / lister / éditer un CV

CvDocumentController → CvDocumentService → MongoDB cvDocuments

CvInitScreen2 / CvListScreen / CvWorkspaceScreen → cvDocumentService

Auto-save

PUT /cv-documents/{id} (mĂŞme chemin que l’Ă©dition)

CvWorkspaceView : watch debounce 2 s → cvBuilderStore.autoSave() → useCvPersistence

Import profil / PDF / texte

CvDocumentController → CvImportService → MinIO + PdfTextExtractor + AiClient

CvInitScreen2 → cvDocumentService

Versions & restauration

CvDocumentController → CvVersionService → MongoDB cvDocumentVersions

CvVersionsScreen / VersionHistoryPanel → cvVersionService

Variantes par offre

CvDocumentController → CvVariantService → MongoDB cvVariants

CvAdaptScreen / VariantsTab → variantService

Partage public

CvDocumentController → CvShareService (token/slug)

SharePanel → cvShareService ; CvPublicView (/cv/:token)

Design

CvDesignController → CvDesignApplicationService → PostgreSQL cv_design_settings

CvDesignRefactoredScreen / CvDesignCustomizePanel

IA (reformuler, générer, chat)

AiController → AiService / CvGenerationService / CvChatService → GeminiClient (Gemini/Groq)

EditorAiPanel, ScratchWizardModal, CvAiCoachScreen → aiService / cvAiService / chatService

Matching CV ↔ offre

CvMatcherController → CvMatcherService (mots-clés, sans IA)

CvAtsScreen / CvAdaptScreen → cvAiService

Export PDF

— (aucun composant serveur)

useCvVectorExport : html2canvas-pro + jsPDF / window.print()

Verdict Sync Gate 2 : âś… APPROUVÉ — chaque flux a un chemin complet et vĂ©rifiĂ© dans le code ; l’export PDF et la validation/scoring sont assumĂ©s cĂ´tĂ© client ; aucun scheduler backend n’intervient dans le CV-Builder.


📊 Résumé Statistique

Catégorie Nombre & Composition

Backend

22 composants principaux Controllers : 4 (CvDocument, CvDesign, Ai, CvMatcher) Services : 11 (6 cvbuilder + 4 IA + 1 matching) Ports/Adapters : 7 (Mongo ×3, R2DBC ×1, IA ×1, Redis ×1, MinIO partagé)

Frontend

30 composants principaux Vues : 2 (CvWorkspaceView, CvPublicView) Écrans : 16 Store : 1 (cvBuilderStore) Services API : 7 Composables : 4 + CvSnapshotManager

Interfaces REST

22 endpoints réels Documents, imports, versions, variantes, partage (dont 2 publics), design, IA (5), matching

Données & externes

MongoDB (4 collections), PostgreSQL (cv_design_settings, référentiel users/resumes), Redis (quotas IA), MinIO (bucket clarajob), Keycloak, API Gemini/Groq


Phase 2 Analysis (2TUP) — catalogue aligné sur le code réel (clarajob-front-api, clarajob-front-gui)