Files
LogiFlow/PRODUCTION-FIX-GUIDE.md
T
michaelschal 6a2e5aad05 Prevent duplicate user entries by handling empty emails
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
2025-08-11 20:13:03 +00:00

4.1 KiB

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 :

-- 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

    psql $DATABASE_URL -f production-users-debug.sql
    
  2. Vérification API : Testez l'endpoint directement

    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 :

    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

    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é.