Files
iag-dev-evaluator/README.md
Julien Froidefond dee59991fc docs: réécriture README complet en français
README entièrement reécrit en français pour les développeurs Peaksys :
architecture server-first, auth bcrypt/rôles, Docker, variables d'env,
pages & fonctionnalités, structure des fichiers à jour.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 16:25:27 +01:00

216 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# IA Gen Maturity Evaluator
Application web de maturité IA/GenAI pour évaluer les candidats lors d'entretiens techniques. Développée par Peaksys pour Peaksys.
## Stack technique
- **Next.js 15** (App Router), **React 19**, **TypeScript**, **TailwindCSS**
- **NextAuth v5** — authentification JWT, bcrypt, rôles `admin` / `evaluator`
- **Prisma** + **SQLite** (dev) — basculer sur Postgres/Supabase en production
- **Recharts** — radar chart des scores
- **jsPDF** — export PDF
- **Vitest** — tests unitaires | **Playwright** — tests E2E
## Prérequis
- Node.js ≥ 20
- pnpm (`npm install -g pnpm`)
## Installation & démarrage local
```bash
pnpm install
cp .env.example .env # puis remplir AUTH_SECRET
pnpm db:generate
pnpm db:push # ou pnpm db:migrate pour une DB vide
pnpm db:seed
pnpm dev
```
Ouvrir [http://localhost:3000](http://localhost:3000).
**Note :** Si la DB existe déjà (créée avec `db push`), pour basculer sur les migrations :
```bash
pnpm prisma migrate resolve --applied 20250220000000_init
```
## Variables d'environnement
| Variable | Obligatoire | Description |
|----------|-------------|-------------|
| `DATABASE_URL` | Oui | `file:./dev.db` en local, URL Postgres en prod |
| `AUTH_SECRET` | Oui | Secret JWT NextAuth (générer avec `openssl rand -base64 32`) |
| `NEXTAUTH_URL` | Prod | URL publique de l'app (ex. `https://eval.peaksys.io`) |
## Docker
Trois configurations disponibles :
### Développement (hot-reload)
```bash
docker compose -f docker-compose.dev.yml up
```
### Production — SQLite (simple, port 3044)
```bash
AUTH_SECRET=$(openssl rand -base64 32) \
DB_VOLUME_PATH=/chemin/vers/data \
docker compose up -d
```
### Production — Postgres
```bash
docker compose -f docker-compose.postgres.yml up -d
```
> Le `Dockerfile` inclut le client Prisma compilé pour Linux (`debian-openssl-3.0.x`).
> La base est migrée automatiquement au démarrage via `docker-start.sh`.
## Architecture
### Flux de données (server-first)
1. **Server Page**`src/lib/server-data.ts` (appelle `auth()` + Prisma)
2. La page passe les données sérialisées aux **Client Components** (`src/components/`)
3. Les composants clients appellent les **Server Actions** (`src/actions/`) pour les mutations
4. Les server actions appellent `revalidatePath()` pour invalider le cache
### Authentification & rôles
- `src/auth.ts` — NextAuth v5, Credentials provider (email + bcrypt), stratégie JWT
- Deux rôles : `evaluator` (défaut) et `admin`
- Inscription via `/auth/signup` (`POST /api/auth/signup`)
- `src/middleware.ts` — protège toutes les routes ; redirige les non-admins hors des routes admin
### Contrôle d'accès aux évaluations
`src/lib/evaluation-access.ts``canAccessEvaluation()` est la source de vérité unique :
- Utilisateur **admin** → accès total
- Utilisateur **evaluator** propriétaire → accès total
- Évaluation **partagée** (`EvaluationShare`) → accès lecture/écriture
- Évaluation **publique** (`isPublic = true`) → accès lecture seule
### Important : staleness du JWT
`session.user.name` est gelé au moment du login. Pour afficher le nom à jour, interroger Prisma via `session.user.id` — ne pas se fier à la session.
## Pages & fonctionnalités
| Route | Accès | Description |
|-------|-------|-------------|
| `/` | Tous | Redirect vers `/dashboard` |
| `/dashboard` | Auth | Liste des évaluations, groupement par équipe, vue carte ou tableau |
| `/evaluations/new` | Auth | Créer une évaluation (candidat, rôle, équipe, template) |
| `/evaluations/[id]` | Voir accès | Guide d'entretien, scores 15, justifications, radar chart, export |
| `/admin` | Admin | Gestion des templates et des utilisateurs |
| `/settings` | Auth | Modifier son nom et son mot de passe |
| `/auth/login` | Public | Connexion |
| `/auth/signup` | Public | Inscription |
### Fonctionnalités clés
- **Scoring** : note 15, justification, exemples observés, niveau de confiance
- **Questions de sondage** : affichées automatiquement quand score ≤ 2
- **Assistant IA (stub)** : suggestions de questions de relance (`/api/ai/suggest-followups`)
- **Export** : CSV (`/api/export/csv?id=`) et PDF (`/api/export/pdf?id=`)
- **Radar chart** : visualisation des scores par dimension
- **Partage** : partager une évaluation avec d'autres utilisateurs (`EvaluationShare`)
- **Visibilité publique** : `isPublic` rend une évaluation lisible sans authentification
- **Audit log** : toute modification post-soumission est tracée
- **Warning** : alerte si tous les scores = 5 sans justification
## Commandes utiles
```bash
pnpm dev # Serveur de développement
pnpm build # Build production
pnpm lint # ESLint
pnpm typecheck # tsc --noEmit
pnpm db:generate # Régénérer le client Prisma après modif du schéma
pnpm db:push # Synchroniser le schéma (dev, sans fichiers de migration)
pnpm db:migrate # Appliquer les migrations (production)
pnpm db:seed # Injecter les données de seed
pnpm db:studio # Ouvrir Prisma Studio
```
## Tests
```bash
# Tests unitaires (Vitest)
pnpm test
# Tests E2E (Playwright) — nécessite le serveur dev lancé
pnpm exec playwright install # une seule fois
pnpm test:e2e
```
## Déploiement (production)
1. Configurer `DATABASE_URL` vers Postgres (Supabase, Neon, etc.)
2. Générer `AUTH_SECRET` : `openssl rand -base64 32`
3. Appliquer les migrations : `pnpm db:migrate`
4. Seeder si besoin : `pnpm db:seed`
5. Build : `pnpm build && pnpm start`
6. Ou déployer sur Vercel (variables d'env à configurer, Vercel Postgres ou DB externe)
## Structure des fichiers
```
src/
├── app/
│ ├── api/ # Routes API (export CSV/PDF, auth, AI stub)
│ ├── auth/ # Pages login / signup
│ ├── dashboard/ # Dashboard principal
│ ├── evaluations/ # Pages évaluation (new, [id])
│ ├── admin/ # Administration (templates, utilisateurs)
│ ├── settings/ # Paramètres utilisateur
│ └── page.tsx # Redirect vers /dashboard
├── actions/ # Server Actions (mutations)
│ ├── evaluations.ts
│ ├── share.ts
│ ├── admin.ts
│ └── password.ts
├── components/ # Composants UI (client + server)
└── lib/
├── server-data.ts # Toutes les requêtes DB (server-side)
├── evaluation-access.ts
├── export-utils.ts
└── ai-stub.ts
prisma/
├── schema.prisma
└── seed.ts
tests/e2e/ # Tests Playwright
```
## Données de seed
- **Utilisateur admin** : `admin@peaksys.local` / `admin123`
- **3 évaluations** de démonstration (Alice Chen, Bob Martin, Carol White) avec équipes
- **2 templates** : Full 15 dimensions, Short 8 dimensions
## Critères d'acceptation
- [x] Auth bcrypt multi-utilisateurs, rôles admin/evaluator
- [x] Dashboard : liste et cartes d'évaluations, groupement par équipe
- [x] Créer/modifier une évaluation : candidat, rôle, équipe, date, template
- [x] Templates : Full 15 dim, Short 8 dim
- [x] Guide d'entretien : définition, rubrique 1→5, signaux, questions par dimension
- [x] Scoring : note 15, justification, exemples, confiance
- [x] Questions de sondage quand score ≤ 2
- [x] Assistant IA (stub) : suggestions de relance
- [x] Radar chart + findings/recommandations auto-générés
- [x] Export PDF et CSV
- [x] Administration : templates et gestion des utilisateurs
- [x] Partage d'évaluation avec d'autres utilisateurs
- [x] Visibilité publique (`isPublic`)
- [x] Alerte si tous les scores = 5 sans commentaires
- [x] Modification post-soumission avec audit log
- [x] Page paramètres : changer nom et mot de passe
- [x] Responsive mobile (Tailwind)