mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
Address issue where users cannot be assigned to groups in production
Add error handling to the user group assignment to gracefully handle missing `created_at` column in production environments, and document the fix. 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/yj7Yt4E
This commit is contained in:
1 parent
469880b6fe
commit
28b60b6bca
4 files changed
+73
-2
No files matched your search
@@ -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é.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 305 KiB |
@@ -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;
|
||||
+17
-2
@@ -689,8 +689,23 @@ export class DatabaseStorage implements IStorage {
|
||||
}
|
||||
|
||||
async assignUserToGroup(userGroup: InsertUserGroup): Promise<UserGroup> {
|
||||
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<void> {
|
||||
|
||||
Reference in new issue
Block a user