feat: add PostgreSQL support and enhance evaluation loading

- Added `pg` and `@types/pg` dependencies for PostgreSQL integration.
- Updated `useEvaluation` hook to load user evaluations from the API, improving data management.
- Refactored `saveUserEvaluation` and `loadUserEvaluation` functions to interact with the API instead of localStorage.
- Introduced error handling for profile loading and evaluation saving to enhance robustness.
- Added new methods for managing user profiles and evaluations, including `clearUserProfile` and `loadEvaluationForProfile`.
This commit is contained in:
Julien Froidefond
2025-08-21 08:46:52 +02:00
parent 488684fd9b
commit 4e82a6d860
14 changed files with 1467 additions and 125 deletions

105
DATABASE_SETUP.md Normal file
View File

@@ -0,0 +1,105 @@
# Configuration PostgreSQL pour PeakSkills
## Setup de développement
### 1. Installation des dépendances
```bash
pnpm install
```
### 2. Configuration de l'environnement
Créer un fichier `.env.local` à la racine du projet :
```env
# Database configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=peakskills
DB_USER=peakskills_user
DB_PASSWORD=peakskills_password
# API configuration (optional, defaults to empty string for same-origin requests)
NEXT_PUBLIC_API_URL=
```
### 3. Démarrage de PostgreSQL avec Docker
```bash
# Démarrer la base de données
docker-compose up -d postgres
# Vérifier que la base est bien démarrée
docker-compose ps
```
### 4. Démarrage de l'application
```bash
pnpm dev
```
## Architecture
### Base de données
La base de données PostgreSQL contient les tables suivantes :
- `users` : Informations utilisateur (nom, prénom, équipe)
- `user_evaluations` : Métadonnées des évaluations utilisateur
- `category_evaluations` : Évaluations par catégorie
- `selected_skills` : Skills sélectionnées pour évaluation
- `skill_evaluations` : Évaluations détaillées des skills
### API
Les endpoints suivants sont disponibles :
- `GET /api/evaluations` : Charger une évaluation utilisateur
- `POST /api/evaluations` : Sauvegarder une évaluation complète
- `PUT /api/evaluations/skills` : Mettre à jour une skill spécifique
### Services
Le dossier `services/` contient tous les services backend :
- `database.ts` : Configuration et pool de connexions PostgreSQL (server-only)
- `evaluation-service.ts` : Service backend pour interfacer avec PostgreSQL (server-only)
- `api-client.ts` : Client pour les appels API depuis le frontend (client-safe)
- `index.ts` : Exports server-side pour les API routes
- `client.ts` : Exports client-safe pour les composants React
**Important** :
- Utiliser `@/services/client` dans les composants React et hooks
- Utiliser `@/services` ou imports directs dans les API routes
Le hook `useEvaluation` (dans `hooks/`) utilise `api-client` pour la persistance.
## Migration depuis localStorage
Les données sont maintenant persistées en base PostgreSQL au lieu du localStorage. Le hook `useEvaluation` a été mis à jour pour :
1. Charger les évaluations depuis l'API
2. Effectuer des mises à jour optimistes pour une meilleure UX
3. Synchroniser avec la base de données
## Commandes utiles
```bash
# Redémarrer la base de données
docker-compose restart postgres
# Voir les logs de la base
docker-compose logs postgres
# Se connecter à la base
docker-compose exec postgres psql -U peakskills_user -d peakskills
# Arrêter tous les services
docker-compose down
# Arrêter et supprimer les volumes (reset complet)
docker-compose down -v
```