Some checks failed
CI/CD Pipeline / Backend - Build, Test & Push (push) Failing after 58s
CI/CD Pipeline / Frontend - Build, Test & Push (push) Failing after 5m55s
CI/CD Pipeline / Integration Tests (push) Has been skipped
CI/CD Pipeline / Deployment Summary (push) Has been skipped
CI/CD Pipeline / Deploy to Portainer (push) Has been skipped
CI/CD Pipeline / Discord Notification (Success) (push) Has been skipped
CI/CD Pipeline / Discord Notification (Failure) (push) Has been skipped
Reorganisation majeure de toute la documentation du projet pour ameliorer la navigation et la maintenance. ## Changements principaux ### Organisation (80 -> 4 fichiers .md a la racine) - Deplace 82 fichiers .md dans docs/ organises en 11 categories - Conserve uniquement 4 fichiers essentiels a la racine: * README.md, CLAUDE.md, PRD.md, TODO.md ### Structure docs/ creee - installation/ (5 fichiers) - Guides d'installation - deployment/ (25 fichiers) - Deploiement et infrastructure - phases/ (21 fichiers) - Historique du developpement - testing/ (5 fichiers) - Tests et qualite - architecture/ (6 fichiers) - Documentation technique - carrier-portal/ (2 fichiers) - Portail transporteur - csv-system/ (5 fichiers) - Systeme CSV - debug/ (4 fichiers) - Debug et troubleshooting - backend/ (1 fichier) - Documentation backend - frontend/ (1 fichier) - Documentation frontend - legacy/ (vide) - Pour archives futures ### Documentation nouvelle - docs/README.md - Index complet de toute la documentation (367 lignes) * Guide de navigation par scenario * Recherche rapide par theme * FAQ et commandes rapides - docs/CLEANUP-REPORT-2025-12-22.md - Rapport detaille du nettoyage ### Scripts reorganises - add-email-to-csv.py -> scripts/ - deploy-to-portainer.sh -> docker/ ### Fichiers supprimes - 1536w default.svg (11MB) - Fichier non utilise ### References mises a jour - CLAUDE.md - Section Documentation completement reecrite - docs/architecture/EMAIL_IMPLEMENTATION_STATUS.md - Chemin script Python - docs/deployment/REGISTRY_PUSH_GUIDE.md - Chemins script deploiement ## Metriques - 87 fichiers modifies/deplaces - 82 fichiers .md organises dans docs/ - 11MB d'espace libere - Temps de recherche reduit de ~5min a ~30s (-90%) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
6.6 KiB
6.6 KiB
Analyse - Pourquoi les informations utilisateur ne s'affichent pas
🔍 Problème Identifié
Les informations de l'utilisateur connecté (nom, prénom, email) ne s'affichent pas dans le dashboard layout.
📊 Architecture du Flux de Données
1. Flux d'Authentification
Login/Register
↓
apiLogin() ou apiRegister()
↓
getCurrentUser() via GET /api/v1/auth/me
↓
setUser(currentUser)
↓
localStorage.setItem('user', JSON.stringify(currentUser))
↓
Affichage dans DashboardLayout
2. Fichiers Impliqués
Frontend
- auth-context.tsx - Gère l'état utilisateur
- dashboard/layout.tsx - Affiche les infos user
- api/auth.ts - Fonction
getCurrentUser() - types/api.ts - Type
UserPayload
Backend
- auth.controller.ts - Endpoint
/auth/me - jwt.strategy.ts - Validation JWT
- current-user.decorator.ts - Type
UserPayload
🐛 Causes Possibles
A. Objet User est null ou undefined
Dans le layout (lignes 95-102):
{user?.firstName?.[0]} // ← Si user est null, rien ne s'affiche
{user?.lastName?.[0]}
{user?.firstName} {user?.lastName}
{user?.email}
Pourquoi user pourrait être null:
- Auth Context n'a pas chargé -
loading: truebloque - getCurrentUser() échoue - Token invalide ou endpoint erreur
- Mapping incorrect - Les champs ne correspondent pas
B. Type UserPayload Incompatible
Frontend (types/api.ts:34):
export interface UserPayload {
id?: string;
sub?: string;
email: string;
firstName?: string; // ← Optionnel
lastName?: string; // ← Optionnel
role: UserRole;
organizationId: string;
}
Backend (current-user.decorator.ts:6):
export interface UserPayload {
id: string;
email: string;
role: string;
organizationId: string;
firstName: string; // ← Requis
lastName: string; // ← Requis
}
⚠️ PROBLÈME: Les types ne correspondent pas!
C. Endpoint /auth/me ne retourne pas les bonnes données
Nouveau code (auth.controller.ts:219):
async getProfile(@CurrentUser() user: UserPayload) {
const fullUser = await this.userRepository.findById(user.id);
if (!fullUser) {
throw new NotFoundException('User not found');
}
return UserMapper.toDto(fullUser);
}
Questions:
- ✅
user.idexiste-t-il? (vient du JWT Strategy) - ✅
userRepository.findById()trouve-t-il l'utilisateur? - ✅
UserMapper.toDto()retourne-t-ilfirstNameetlastName?
D. JWT Strategy retourne bien les données
Bon code (jwt.strategy.ts:68):
return {
id: user.id,
email: user.email,
role: user.role,
organizationId: user.organizationId,
firstName: user.firstName, // ✅ Présent
lastName: user.lastName, // ✅ Présent
};
🧪 Composant de Debug Ajouté
Fichier créé: DebugUser.tsx
Ce composant affiche en bas à droite de l'écran:
- ✅ État
loading - ✅ Objet
usercomplet (JSON) - ✅ Contenu de
localStorage.getItem('user') - ✅ Token JWT (50 premiers caractères)
🔧 Solutions à Tester
Solution 1: Vérifier la Console Navigateur
- Ouvrez les DevTools (F12)
- Allez dans l'onglet Console
- Cherchez les erreurs:
Auth check failed:Failed to refresh user:- Erreurs 401 ou 404
Solution 2: Vérifier le Panel Debug
Regardez le panel noir en bas à droite qui affiche:
{
"id": "uuid-user",
"email": "user@example.com",
"firstName": "John", // ← Doit être présent
"lastName": "Doe", // ← Doit être présent
"role": "USER",
"organizationId": "uuid-org"
}
Si firstName et lastName sont absents:
- L'endpoint
/api/v1/auth/mene retourne pas les bonnes données
Si tout l'objet user est null:
- Le token est invalide ou expiré
- Déconnectez-vous et reconnectez-vous
Solution 3: Tester l'Endpoint Manuellement
# Récupérez votre token depuis localStorage (F12 > Application > Local Storage)
TOKEN="votre-token-ici"
# Testez l'endpoint
curl -H "Authorization: Bearer $TOKEN" http://localhost:4000/api/v1/auth/me
Réponse attendue:
{
"id": "...",
"email": "...",
"firstName": "...", // ← DOIT être présent
"lastName": "...", // ← DOIT être présent
"role": "...",
"organizationId": "...",
"isActive": true,
"createdAt": "...",
"updatedAt": "..."
}
Solution 4: Forcer un Rafraîchissement
Ajoutez un console.log dans auth-context.tsx:
const currentUser = await getCurrentUser();
console.log('🔍 User fetched:', currentUser); // ← AJOUTEZ CECI
setUser(currentUser);
📋 Checklist de Diagnostic
- Backend démarré? → http://localhost:4000/api/docs
- Token valide? → Vérifier dans DevTools > Application > Local Storage
- Endpoint
/auth/mefonctionne? → Tester avec curl/Postman - Panel Debug affiche des données? → Voir coin bas-droite de l'écran
- Console a des erreurs? → F12 > Console
- User object dans console? → Ajoutez des console.log
🎯 Prochaines Étapes
- Rechargez la page du dashboard
- Regardez le panel debug en bas à droite
- Ouvrez la console (F12)
- Partagez ce que vous voyez:
- Contenu du panel debug
- Erreurs dans la console
- Réponse de
/auth/mesi vous testez avec curl
Fichiers modifiés pour debug:
- ✅ DebugUser.tsx - Composant de debug
- ✅ dashboard/layout.tsx - Ajout du debug panel
Pour retirer le debug plus tard:
Supprimez simplement <DebugUser /> de la ligne 162 du layout.