đïž Diagramme de Classes â CV-Builder ClaraJob
ModĂšle statique rĂ©el â extrait du code de clarajob-front-api et clarajob-front-gui
|
Note
|
đș Diagrammes SVG de ce document
Vue interactive : index.html |
Vue d’ensemble
Le modĂšle de classes du CV-Builder repose sur un choix structurant, visible dans le code :
-
Backend minimaliste et schemaless â un seul agrĂ©gat
CvDocumentporte tout le CV ; son contenu (data) est unMap<String,Object>stockĂ© tel quel dans MongoDB. Il n’existe aucune classe Java pour les sections (expĂ©rience, formation, compĂ©tenceâŠ). -
Frontend porteur du modĂšle riche â c’est TypeScript qui type le contenu du CV (
CvData,CvExperience,CvSkillâŠ) ; le backend le transporte sans l’interprĂ©ter. -
IA structurante â le schĂ©ma de fait du contenu est dĂ©fini par les prompts (
STRUCTURATION_PROMPTdeCvImportService, prompts deCvChatService/CvGenerationService) et validé cÎté client par Zod (chat.validation.ts).
Organisation du backend : DDD par bounded context â
com.clarajob.cvbuilder.{domain,application,infrastructure,presentation},
avec les contextes voisins ai (services IA), job (matching CV/offre) et user (fichiers resumes).
L’isolation des couches est vĂ©rifiĂ©e par ArchUnit (CvBuilderArchTest).
đ Diagramme UML Complet
Lecture du diagramme :
-
Vert â domaine
cvbuilder(agrégat, value objects, ports) -
Bleu â services applicatifs et presentation (controllers spec-first OpenAPI)
-
Violet â contexte
ai(portAiClient,GeminiClientbi-provider, services IA) -
Orange â infrastructure de persistance (entities
@Document, adapters, repositories Mongo bloquants) -
Jaune â modĂšle TypeScript du frontend (types, store Pinia, composables)
đ Dictionnaire des Classes â Backend
Domaine cvbuilder (package com.clarajob.cvbuilder.domain.model)
CvDocument (agrégat racine)
Responsabilité |
CV du builder : identité du document, design, contenu schemaless, partage |
Attributs |
|
Opérations |
|
Persistance |
Collection MongoDB |
UC associés |
UC01âUC12, UC19 |
CvDocumentVersion
Responsabilité |
Snapshot immuable d’un CV (versioning manuel + rotation) |
Attributs |
|
Opérations |
|
Persistance |
Collection |
UC associés |
UC14 |
CvVariant
Responsabilité |
Variante d’un CV maĂźtre adaptĂ©e Ă une offre d’emploi |
Attributs |
|
Opérations |
|
Persistance |
Collection |
UC associés |
UC15 |
Value Objects
Records |
|
Ports du domaine (domain.repository)
|
|
|
|
|
|
Contenu du CV â schĂ©ma de fait de data
Aucune classe Java : le schéma est défini par les prompts IA et les types TypeScript.
identity { firstName, lastName, title, email, phone, city, linkedin, portfolio }
summary String (HTML TipTap)
experiences [{ id, position, company, startDate, endDate, description, skills[] }]
education [{ id, degree, institution, startYear, endYear, mention }]
skills [{ name, level 1-5, pleasure, seniority, potential, category, active }]
languages [{ name, level CECRL }]
projects [{ id, name, description, url, skills[] }]
certifications[{ id, name, issuer, year }]
customSections?, fontFamily, fontSize?, spacing, sectionOrder?, hiddenSections?
category â frontend | backend | devops | database | tools | soft-skills | methodology | other.
Services applicatifs (application.service)
| Service | Responsabilités & méthodes (toutes réactives Mono/Flux) |
|---|---|
|
CRUD du CV â |
|
Versioning â |
|
Variantes â |
|
Partage â |
|
Imports â |
DTOs â application : CvDocumentResponse, CvVersionResponse, CvVariantResponse,
CvShareResponse(shareEnabled, shareToken, shareSlug, tokenUrl, slugUrl), CvPublicResponse ;
presentation : SaveCvRequest, UpdateCvRequest, CreateVersionRequest, CreateVariantRequest,
UpdateVariantRequest, UpdateShareRequest, ImportPdfRequest, UpdateCvBuilderConfigRequest.
Presentation (spec-first OpenAPI)
|
|
|
Adapte |
Contexte ai
|
|
|
Implémentation unique, bi-provider ( |
|
|
|
|
|
|
|
Provider, clé, modÚle (déf. |
Contexte job â CvMatcherService
Matching CV â offre purement algorithmique (aucune IA) : normalisation NFD, extraction de
mots-clés (regex [\p{L}\p{N}+#]+), stop-words FR/EN, score = matched/total à 100.
Endpoint public POST /api/v1/cv/match.
Infrastructure de persistance
| Classe | RĂŽle |
|---|---|
|
|
|
Implémentent les ports du domaine en enveloppant les repositories Spring Data bloquants
( |
|
Mappers statiques manuels entitĂ© â domaine (pas de MapStruct pour le CV builder) |
|
Important
|
Branche morte â Ă ne pas confondre avec le modĂšle actif : |
đ Dictionnaire â ModĂšle Frontend (TypeScript)
Types du CV (src/types/cv-builder.types.ts)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Unions |
|
|
|
Store et logique applicative
|
Store unique du builder. State : |
|
Ătat du chat Clara hors Pinia (module-level) : messages, actions en attente
( |
|
Score client pur : 8 sections notĂ©es /10 â total %, score ATS par bonus fixes, dĂ©tection de 12 clichĂ©s, conseils contextuels â aucune validation bloquante de formulaire |
|
Galerie 57 Ă 20 avec filtres / export PDF vectoriel par |
Services API |
|
đ Relations ClĂ©s
| De | Vers | Relation |
|---|---|---|
|
|
1 â 0..10 (par |
|
|
1 â * (par |
|
|
1 â 1 (VO embarquĂ©, aplati en persistance) |
|
|
miroir schemaless â typĂ© (contrat implicite via prompts + Zod) |
Services applicatifs |
Ports du domaine |
dépendance par interface (hexagonal) |
Adapters |
|
délégation + |
|
|
port/adapter, bi-provider Gemini|Groq |
|
Backend |
upsert complet |
đ TraçabilitĂ© UC â Classes
| UC# | Nom | Classes principales |
|---|---|---|
UC01 |
Créer un CV depuis zéro |
|
UC02 |
Importer un CV PDF |
|
UC03 |
Importer depuis le profil |
|
UC04 |
Consulter mes CV |
|
UC05 |
Supprimer un CV |
|
UC06 |
Modifier le contenu |
8 |
UC07 |
Réorganiser / masquer |
|
UC08 |
Choisir un template |
|
UC09 |
Personnaliser le design |
|
UC10 |
Prévisualiser |
|
UC11 |
Exporter en PDF |
|
UC12 |
Partager le CV |
|
UC13 |
Consulter un CV partagé |
|
UC14 |
Gérer les versions |
|
UC15 |
Adapter Ă une offre |
|
UC16 |
Discuter avec Clara |
|
UC17 |
Reformuler / générer |
|
UC18 |
Score et conseils |
|
UC19 |
Sauvegarde automatique |
|
đ RĂ©sumĂ© Statistique (comptĂ© dans le code)
Backend â domaine |
3 agrégats/entités ( |
Backend â services |
5 services cvbuilder + 3 services IA + |
Backend â persistance |
4 collections MongoDB, 3 adapters, 3 mappers statiques ; 0 table SQL pour le CV |
Backend â controllers |
|
Frontend â types |
12 interfaces + 10 unions ( |
Frontend â store |
1 store Pinia ( |
Frontend â rendu |
57 composants de layout, 1140 templates générés (57 à 20 palettes) |
Cas d’utilisation tracĂ©s |
19/19 (UC01âUC19) |
â ïž Ăcarts assumĂ©s (documentĂ©s, prĂ©sents dans le code)
-
CvDocument.versionn’est jamais incrĂ©mentĂ© (toujours 1) â le versioning rĂ©el passe parcvDocumentVersions. -
CvVariantServicene vĂ©rifie pas l’ownership (userIdignorĂ©). -
Le quota IA (Redis) est cùblé mais jamais appelé par
AiController. -
Le contrat OpenAPI
/api/v1/cvs(export, share, crĂ©ation) est majoritairement en 501 â la vraie API est/api/v1/cv-documents. -
CvDesignSettings(PostgreSQL) est une branche morte non migrée.
đïž Comment Consulter ce Diagramme
-
Ouvrir classes-uml-diagram.svg dans le navigateur et zoomer par zone de couleur.
-
Ou générer le site :
./gradlew asciidoctorpuis naviguer CV-Builder â Diagrammes de Classes. -
Croiser avec les 19 UC via le tableau de traçabilité ci-dessus.
Ce document est aligné sur le code au 2026-07-29 (branches develop de clarajob-front-api / clarajob-front-gui).