mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-12 01:37:40 +02:00
Improve user group assignment debugging and logging in production
Add SQL debugging script and enhanced console logs to diagnose user group assignment issues in production, addressing user reports of unassigned groups. Replit-Commit-Author: Agent Replit-Commit-Session-Id: a8a78c07-e900-425c-a577-5b4c5894379d Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/a8a78c07-e900-425c-a577-5b4c5894379d/fwSlq3W
This commit is contained in:
1 parent
f705fb4b1c
commit
07b848b127
4 files changed
+74
-1
No files matched your search
@@ -32,6 +32,21 @@ ADD COLUMN IF NOT EXISTS created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
|
||||
1. **Changement de Mot de Passe** : Testez via l'interface utilisateur
|
||||
2. **Attribution de Groupes** : Testez l'assignment d'utilisateurs aux groupes
|
||||
|
||||
## 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
|
||||
|
||||
### 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`
|
||||
|
||||
## Déploiement
|
||||
|
||||
1. Redéployez votre application avec les dernières modifications
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 338 KiB |
@@ -0,0 +1,46 @@
|
||||
-- Script de débogage pour vérifier l'état des groupes d'utilisateurs en production
|
||||
-- À exécuter sur votre base de données de production
|
||||
|
||||
-- 1. Vérifier la structure de la table user_groups
|
||||
\d user_groups;
|
||||
|
||||
-- 2. Vérifier tous les enregistrements dans user_groups
|
||||
SELECT * FROM user_groups ORDER BY user_id;
|
||||
|
||||
-- 3. Vérifier les groupes disponibles
|
||||
SELECT id, name, color FROM groups ORDER BY name;
|
||||
|
||||
-- 4. Vérifier les utilisateurs existants
|
||||
SELECT id, username, email, role FROM users ORDER BY username;
|
||||
|
||||
-- 5. Requête combinée pour voir les associations utilisateur-groupe
|
||||
SELECT
|
||||
u.id as user_id,
|
||||
u.username,
|
||||
u.email,
|
||||
ug.group_id,
|
||||
g.name as group_name,
|
||||
g.color as group_color
|
||||
FROM users u
|
||||
LEFT JOIN user_groups ug ON u.id = ug.user_id
|
||||
LEFT JOIN groups g ON ug.group_id = g.id
|
||||
ORDER BY u.username, g.name;
|
||||
|
||||
-- 6. Compter les associations par utilisateur
|
||||
SELECT
|
||||
u.username,
|
||||
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
|
||||
ORDER BY u.username;
|
||||
|
||||
-- 7. Vérifier s'il y a des enregistrements orphelins dans user_groups
|
||||
SELECT
|
||||
ug.*,
|
||||
CASE WHEN u.id IS NULL THEN 'USER_MISSING' ELSE 'USER_OK' END as user_status,
|
||||
CASE WHEN g.id IS NULL THEN 'GROUP_MISSING' ELSE 'GROUP_OK' END as group_status
|
||||
FROM user_groups ug
|
||||
LEFT JOIN users u ON ug.user_id = u.id
|
||||
LEFT JOIN groups g ON ug.group_id = g.id
|
||||
WHERE u.id IS NULL OR g.id IS NULL;
|
||||
+13
-1
@@ -187,12 +187,18 @@ export class DatabaseStorage implements IStorage {
|
||||
}
|
||||
|
||||
async getUserWithGroups(id: string): Promise<UserWithGroups | undefined> {
|
||||
console.log(`🔍 getUserWithGroups called for user: ${id}`);
|
||||
|
||||
// Get the user first
|
||||
const user = await this.getUser(id);
|
||||
if (!user) return undefined;
|
||||
if (!user) {
|
||||
console.log(`❌ User ${id} not found`);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// Fixed: Use manual SQL to avoid userGroups.createdAt column that doesn't exist
|
||||
try {
|
||||
console.log(`🔍 Querying user_groups for user: ${id}`);
|
||||
const result = await db.execute(sql`
|
||||
SELECT
|
||||
ug.user_id,
|
||||
@@ -211,6 +217,9 @@ export class DatabaseStorage implements IStorage {
|
||||
WHERE ug.user_id = ${id}
|
||||
`);
|
||||
|
||||
console.log(`🔍 Found ${result.rows.length} group assignments for user ${id}`);
|
||||
console.log(`🔍 Raw query result:`, result.rows);
|
||||
|
||||
const userGroupsData = result.rows.map((row: any) => ({
|
||||
userId: row.user_id,
|
||||
groupId: row.group_id,
|
||||
@@ -228,12 +237,15 @@ export class DatabaseStorage implements IStorage {
|
||||
}
|
||||
}));
|
||||
|
||||
console.log(`✅ Processed ${userGroupsData.length} groups for user ${id}`);
|
||||
|
||||
return {
|
||||
...user,
|
||||
userGroups: userGroupsData,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('❌ getUserWithGroups error:', error);
|
||||
console.error('❌ Error details:', error?.code, error?.message);
|
||||
// Fallback: return user with empty groups
|
||||
return {
|
||||
...user,
|
||||
|
||||
Reference in new issue
Block a user