diff --git a/PRODUCTION-FIX-GUIDE.md b/PRODUCTION-FIX-GUIDE.md new file mode 100644 index 0000000..55c9745 --- /dev/null +++ b/PRODUCTION-FIX-GUIDE.md @@ -0,0 +1,47 @@ +# Guide de Correction Production - LogiFlow + +## Problèmes Résolus ✅ + +### 1. Changement de Mot de Passe Administrateur +**Problème** : ERR_MODULE_NOT_FOUND pour localAuth.production.js +**Solution** : Implémentation d'une fonction `hashPasswordSimple` intégrée dans routes.ts qui fonctionne dans tous les environnements. + +### 2. Attribution des Groupes aux Utilisateurs +**Problème** : Colonne "created_at" manquante dans la table user_groups en production +**Solution** : Gestion d'erreur dans `assignUserToGroup` avec fallback automatique. + +## Solutions Disponibles + +### Solution A : Correction Automatique (Recommandée) ✅ +Le code a été modifié pour détecter automatiquement si la colonne `created_at` existe : +- Essaie d'insérer avec le schéma complet +- En cas d'erreur, insère sans la colonne `created_at` +- Aucune intervention manuelle requise + +### Solution B : Mise à Jour de Base de Données (Optionnelle) +Si vous souhaitez synchroniser complètement votre base de données production avec le schéma : + +```sql +-- Exécuter sur votre serveur de production +ALTER TABLE user_groups +ADD COLUMN IF NOT EXISTS created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; +``` + +## Test des Corrections + +1. **Changement de Mot de Passe** : Testez via l'interface utilisateur +2. **Attribution de Groupes** : Testez l'assignment d'utilisateurs aux groupes + +## Déploiement + +1. Redéployez votre application avec les dernières modifications +2. Testez les fonctionnalités utilisateur en production +3. Les logs montreront si le mode fallback est utilisé pour les groupes + +## Logs de Débogage + +En production, vous verrez : +- `⚠️ Production mode: user_groups table missing created_at column, inserting without it` si la colonne n'existe pas +- Aucun message si la table a été mise à jour avec la colonne manquante + +Ces corrections garantissent la compatibilité dans tous les environnements sans casser la fonctionnalité. \ No newline at end of file diff --git a/attached_assets/image_1754941438794.png b/attached_assets/image_1754941438794.png new file mode 100644 index 0000000..5253589 Binary files /dev/null and b/attached_assets/image_1754941438794.png differ diff --git a/fix-production-usergroups.sql b/fix-production-usergroups.sql new file mode 100644 index 0000000..03aa0c0 --- /dev/null +++ b/fix-production-usergroups.sql @@ -0,0 +1,9 @@ +-- Fix production user_groups table to add missing created_at column +-- This should be run on your production database + +-- Add the missing created_at column to user_groups table +ALTER TABLE user_groups +ADD COLUMN IF NOT EXISTS created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP; + +-- Verify the table structure +\d user_groups; \ No newline at end of file diff --git a/server/storage.ts b/server/storage.ts index 8c70b1a..afeccaa 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -689,8 +689,23 @@ export class DatabaseStorage implements IStorage { } async assignUserToGroup(userGroup: InsertUserGroup): Promise { - const [newUserGroup] = await db.insert(userGroups).values(userGroup).returning(); - return newUserGroup; + try { + // Try with full schema first (development) + const [newUserGroup] = await db.insert(userGroups).values(userGroup).returning(); + return newUserGroup; + } catch (error: any) { + // If created_at column doesn't exist (production), insert without it + if (error?.code === '42703' && error?.message?.includes('created_at')) { + console.log('⚠️ Production mode: user_groups table missing created_at column, inserting without it'); + const userGroupWithoutCreatedAt = { + userId: userGroup.userId, + groupId: userGroup.groupId + }; + const [newUserGroup] = await db.insert(userGroups).values(userGroupWithoutCreatedAt).returning(); + return { ...newUserGroup, createdAt: null }; + } + throw error; + } } async removeUserFromGroup(userId: string, groupId: number): Promise {