feat(profil): API CRUD + UI saisie/édition + import copier-coller (THI-132, slice 3/3) - #10
Conversation
|
Warning Review limit reached
More reviews will be available in 13 minutes and 59 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Free Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (13)
Note 🎁 Summarized by CodeRabbit FreeYour organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login. Comment |
|
⛔ Repassée en DRAFT par le CTO — bloquée derrière #8. Cette PR est empilée sur #8 (auth) et embarque son code |
…slice 3a/3) Endpoints Nitro CRUD profil + import par copier-coller (MVP sans LLM). Serializer pur (testé unitairement), helper session H3/Better Auth. - GET/PUT /api/profile — lecture/upsert en-tête (headline, summary) - POST /api/profile/experiences — ajout + soft-delete DELETE /:id - POST /api/profile/skills — ajout + soft-delete DELETE /:id (SkillLevel validé) - POST /api/profile/import-text — parseur heuristique texte brut (suggestion uniquement, aucune écriture en base avant confirmation utilisateur — garde-fou produit) - server/utils/profile-serialize.ts — toProfileDTO + NOT_DELETED + activeOrdered (fonctions pures, filtre soft-delete, tri orderIndex) - server/utils/session.ts — getAuthSession(event) : H3 → Better Auth via toWebRequest - test/profile-serialize.spec.ts — 5 cas (NOT_DELETED, toIso, activeOrdered, toProfileDTO) - zod installé pour validation des corps de requête QA locale : lint ✓ · typecheck TS strict ✓ · build Nitro ✓ · test 11 ✓ Co-Authored-By: Paperclip <noreply@paperclip.ing>
…132, slice 3b/3) UI de saisie structurée du profil candidat (expériences, compétences, formation) et import par copier-coller de texte avec étape de relecture (garde-fou : rien n'est enregistré avant confirmation utilisateur). - pages/profil.vue — saisie/édition en-tête, expériences, compétences ; import coller-texte → suggestion → confirmation → persist via API ; Tailwind tokens (aucune valeur en dur) ; page en FR - middleware/auth.ts — middleware de navigation : redirige /connexion si non connecté - composables/useAuth.ts — déplacé ici (était dans slice 2) ; singleton client Better Auth + signIn/signOut + session réactive QA locale : lint ✓ · typecheck TS strict ✓ · build Nitro ✓ · test 11 ✓ Co-Authored-By: Paperclip <noreply@paperclip.ing>
cc2c653 to
637eedb
Compare
WS-Auth+Profil — Slice 3/3 : UI profil + endpoints (THI-132)
Stacké sur PR #8 (
feat/auth-magic-link). À merger dans l'ordre PR #5 → PR #8 → ce PR.Complète le DoD de THI-123 : l'utilisateur peut créer un compte (magic-link), saisir/coller son profil, le relire/éditer.
Contenu (2 commits)
Commit 1 — API serveur (slice 3a/3)
GET /api/profile— lecture profil connecté (sans entrées soft-delete).PUT /api/profile— upsert headline + summary.POST /api/profile/experiences+DELETE /api/profile/experiences/:id— soft-delete RGPD.POST /api/profile/skills+DELETE /api/profile/skills/:id— soft-delete RGPD.POST /api/profile/import-text— parseur heuristique texte brut → suggestion uniquement (aucune écriture avant confirmation utilisateur — garde-fou).server/utils/profile-serialize.ts—toProfileDTO,NOT_DELETED,activeOrdered(fonctions pures testées).server/utils/session.ts—getAuthSession(event): bridge H3/Nitro → Better Auth.zodpour validation des corps de requête.Commit 2 — UI (slice 3b/3)
pages/profil.vue— saisie/édition en-tête, expériences, compétences ; section import copier-coller avec relecture avant confirmation. Tailwind tokens, FR.middleware/auth.ts— protège les pages authentifiées, redirige vers/connexion.composables/useAuth.ts— client Better Auth (signIn/signOut+ session réactive).Garde-fou produit
L'import coller-texte retourne uniquement une suggestion (pas d'écriture en base). L'utilisateur revoit, puis clique « Confirmer et enregistrer » → les données saisies sont la seule source de vérité du futur moteur (THI-124).
QA locale
pnpm lint✓ ·pnpm typecheckTS strict ✓ ·pnpm buildNitro ✓ ·pnpm test✓ (11 tests).Parcours de test (dev, sans SMTP)
Règles
PR-only · seul Thibault merge · TS strict · Tailwind tokens · soft-delete RGPD.