mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-15 11:19:43 +02:00
Fixes an issue where creating or editing users with empty email fields would violate a unique constraint in the database. The solution involves updating user routes to treat empty email strings as NULL, adjusting validation schemas, and providing a script to clean existing data. 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/zoO1uWT
108 lines
4.1 KiB
Markdown
108 lines
4.1 KiB
Markdown
# 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ébogage Production
|
|
|
|
### Problème "Aucun utilisateur trouvé"
|
|
Si l'interface affiche "Aucun utilisateur trouvé" :
|
|
|
|
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
|
|
|
|
### Problème Création d'Utilisateur
|
|
|
|
#### Erreur "duplicate key value violates unique constraint users_email_key"
|
|
Cette erreur survient lors de la **création** ou **édition** d'utilisateur quand plusieurs utilisateurs ont un email vide (`""`) car PostgreSQL traite les chaînes vides comme des valeurs uniques.
|
|
|
|
**Symptômes** :
|
|
- Création d'utilisateur échoue avec erreur `Key (email)=() already exists`
|
|
- Édition d'utilisateur échoue avec la même erreur lors de la sauvegarde
|
|
|
|
**Solution** :
|
|
1. Exécutez le script de correction :
|
|
```bash
|
|
psql $DATABASE_URL -f fix-duplicate-empty-email.sql
|
|
```
|
|
|
|
2. Redéployez l'application (le code a été corrigé pour utiliser `NULL` au lieu de `""` dans les routes de création ET d'édition)
|
|
|
|
#### Tests de Création
|
|
1. **Test Manuel** : Utilisez `test-create-user-production.js`
|
|
```bash
|
|
PRODUCTION_HOST=votre-domaine.com SESSION_COOKIE="connect.sid=..." node test-create-user-production.js
|
|
```
|
|
|
|
2. **Vérification Logs** : Cherchez ces messages d'erreur :
|
|
- `❌ Password hashing failed`
|
|
- `❌ Storage createUser error`
|
|
- `duplicate key value violates unique constraint`
|
|
|
|
### Logs de Débogage Disponibles
|
|
**Récupération Utilisateurs :**
|
|
- `🔍 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}`
|
|
|
|
**Création Utilisateur :**
|
|
- `🔍 POST /api/users - Creating new user`
|
|
- `📥 Request body: [données]`
|
|
- `🔒 Hashing password...`
|
|
- `🔍 Storage createUser called with: [username]`
|
|
- `✅ Storage createUser successful: [username]`
|
|
|
|
## 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é. |