diff --git a/PRODUCTION-FIX-GUIDE.md b/PRODUCTION-FIX-GUIDE.md index 28fbff0..c0c2619 100644 --- a/PRODUCTION-FIX-GUIDE.md +++ b/PRODUCTION-FIX-GUIDE.md @@ -34,18 +34,28 @@ ADD COLUMN IF NOT EXISTS created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; ## Débogage Production -### Script de Diagnostic SQL -Utilisez le script `debug-usergroups-production.sql` pour : -- Vérifier la structure de la table user_groups -- Examiner les données existantes -- Identifier les problèmes d'association utilisateur-groupe +### Problème "Aucun utilisateur trouvé" +Si l'interface affiche "Aucun utilisateur trouvé" : -### Logs de Débogage -Les logs suivants sont maintenant disponibles : -- `🔍 getUserWithGroups called for user: [id]` -- `🔍 Querying user_groups for user: [id]` -- `🔍 Found X group assignments for user [id]` -- `⚠️ Production mode: user_groups table missing created_at column, using raw SQL` +1. **Vérification Base de Données** : Utilisez `production-users-debug.sql` + ```bash + psql $DATABASE_URL -f production-users-debug.sql + ``` + +2. **Vérification API** : Testez l'endpoint directement + ```bash + curl -H "Cookie: [votre-cookie-session]" https://votre-domaine.com/api/users + ``` + +### Script de Diagnostic SQL +- `debug-usergroups-production.sql` : Problèmes d'association utilisateur-groupe +- `production-users-debug.sql` : Problème de récupération des utilisateurs + +### Logs de Débogage Disponibles +- `🔍 GET /api/users - Fetching users with simplified approach` +- `📊 Found X base users` +- `❌ Error getting groups for user [username]:` +- `🔐 API /api/users - Returning: {length: X, totalGroups: Y}` ## Déploiement diff --git a/attached_assets/image_1754942324848.png b/attached_assets/image_1754942324848.png new file mode 100644 index 0000000..dba6ab9 Binary files /dev/null and b/attached_assets/image_1754942324848.png differ diff --git a/production-users-debug.sql b/production-users-debug.sql new file mode 100644 index 0000000..cf8a83c --- /dev/null +++ b/production-users-debug.sql @@ -0,0 +1,37 @@ +-- Script de diagnostic pour résoudre le problème "Aucun utilisateur trouvé" en production + +-- 1. Vérifier si la table users existe et contient des données +SELECT 'Users table check' as diagnostic; +SELECT COUNT(*) as user_count FROM users; +SELECT id, username, email, role FROM users LIMIT 5; + +-- 2. Vérifier la structure de la table users +SELECT 'Users table structure' as diagnostic; +\d users; + +-- 3. Vérifier les connexions/permissions de base de données +SELECT 'Database info' as diagnostic; +SELECT current_database(), current_user, version(); + +-- 4. Vérifier la table groups +SELECT 'Groups table check' as diagnostic; +SELECT COUNT(*) as group_count FROM groups; +SELECT id, name FROM groups LIMIT 5; + +-- 5. Vérifier la table user_groups et sa structure +SELECT 'User_groups table check' as diagnostic; +SELECT COUNT(*) as user_group_count FROM user_groups; +\d user_groups; + +-- 6. Test de la requête utilisée par l'application +SELECT 'Full user query test' as diagnostic; +SELECT + u.id, + u.username, + u.email, + u.role, + COUNT(ug.group_id) as groups_count +FROM users u +LEFT JOIN user_groups ug ON u.id = ug.user_id +GROUP BY u.id, u.username, u.email, u.role +LIMIT 5; \ No newline at end of file diff --git a/server/routes.ts b/server/routes.ts index b518ac0..cda0e59 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -862,20 +862,44 @@ export async function registerRoutes(app: Express): Promise { return res.status(403).json({ message: "Access denied" }); } - console.log('🔍 GET /api/users - Fetching users with roles and groups'); - // Get all users with groups for admin - const allUsers = await storage.getUsersWithRolesAndGroups(); - const safeUsers = Array.isArray(allUsers) ? allUsers : []; + console.log('🔍 GET /api/users - Fetching users with simplified approach'); + + // Get all basic users first + const baseUsers = await storage.getUsers(); + console.log(`📊 Found ${baseUsers.length} base users`); + + // Add userGroups and userRoles to each user individually with error handling + const usersWithData = await Promise.all( + baseUsers.map(async (baseUser) => { + try { + const userWithGroups = await storage.getUserWithGroups(baseUser.id); + return { + ...baseUser, + userGroups: userWithGroups?.userGroups || [], + userRoles: [] // Keep roles simple for now since we're using hardcoded permissions + }; + } catch (error) { + console.error(`❌ Error getting groups for user ${baseUser.username}:`, error); + // Return user with empty groups if there's an error + return { + ...baseUser, + userGroups: [], + userRoles: [] + }; + } + }) + ); console.log('🔐 API /api/users - Returning:', { - isArray: Array.isArray(safeUsers), - length: safeUsers.length, - firstUserGroups: safeUsers.length > 0 ? safeUsers[0].userGroups?.length || 0 : 0 + isArray: Array.isArray(usersWithData), + length: usersWithData.length, + totalGroups: usersWithData.reduce((sum, u) => sum + (u.userGroups?.length || 0), 0) }); - res.json(safeUsers); + res.json(usersWithData); } catch (error) { - console.error("Error fetching users:", error); + console.error("❌ Critical error fetching users:", error); + console.error("❌ Error stack:", error.stack); // En cas d'erreur, retourner un array vide pour éviter React Error #310 res.status(500).json([]); }