LOGIFLOW - SCHÉMA BASE DE DONNÉES PRODUCTION
===============================================

GÉNÉRÉ LE : ${new Date().toISOString()}
SERVEUR : Production privé LogiFlow
ENVIRONNEMENT : PostgreSQL Docker

===============================================
RÉSUMÉ DU SCAN DE SCHÉMA
===============================================

Le scan de schéma automatique est maintenant fonctionnel en production.
URL d'accès : GET /api/debug/log-schema

CORRECTIONS APPORTÉES :
- Correction de l'accès direct au pool PostgreSQL
- Remplacement de (storage as any).db.query par pool.query
- Import direct de { db, pool } depuis ./db.ts
- Vérification de disponibilité du pool avant utilisation

FONCTIONNALITÉS :
1. Liste complète des tables avec colonnes détaillées
2. Types de données, contraintes NULL/NOT NULL
3. Valeurs par défaut des colonnes
4. Nombre d'enregistrements par table
5. Contraintes de clés étrangères
6. Relations entre tables

ACCÈS SÉCURISÉ :
- Réservé aux administrateurs uniquement
- Fonctionne uniquement en production (NODE_ENV=production)
- Authentification requise
- Logs détaillés dans la console du serveur

===============================================
STRUCTURE PRÉVUE DES TABLES LOGIFLOW
===============================================

TABLES PRINCIPALES :
- users : Gestion des utilisateurs et rôles
- groups : Magasins/groupes de la chaîne
- user_groups : Affectations utilisateurs-magasins
- suppliers : Fournisseurs
- orders : Commandes fournisseurs
- deliveries : Livraisons
- customer_orders : Commandes clients/caisse
- publicities : Campagnes publicitaires
- publicity_participations : Participation magasins aux publicités
- dlc_products : Produits à date limite de consommation
- tasks : Tâches et assignations
- session : Sessions utilisateurs (connect-pg-simple)

TABLES SYSTÈME :
- nocodb_config : Configuration intégration NocoDB
- database_backups : Historique sauvegardes

===============================================
RELATIONS CLÉS ATTENDUES
===============================================

users.id → orders.createdBy
users.id → deliveries.createdBy
users.id → customer_orders.createdBy
users.id → tasks.assignedTo

groups.id → orders.groupId
groups.id → deliveries.groupId
groups.id → customer_orders.groupId
groups.id → user_groups.groupId

suppliers.id → orders.supplierId
suppliers.id → deliveries.supplierId

orders.id → deliveries.orderId

===============================================
UTILISATION DU SCAN EN PRODUCTION
===============================================

ÉTAPES POUR SCANNER :
1. Se connecter en tant qu'administrateur
2. Aller sur /database-debug
3. Cliquer sur "Scanner le Schéma de la Base"
4. Consulter les logs du serveur pour le détail complet

INFORMATIONS OBTENUES :
- Structure exacte de toutes les tables
- Nombre d'enregistrements réels
- Contraintes et relations actives
- Types de données PostgreSQL utilisés
- Colonnes auto-générées et valeurs par défaut

DÉBOGAGE :
- Toutes les informations sont loggées dans la console serveur
- Format lisible avec emojis et sections organisées
- Timestamp de chaque scan pour traçabilité
- Gestion d'erreurs détaillée

===============================================
NOTES TECHNIQUES
===============================================

POOL POSTGRESQL :
- Configuration : max 10 connexions
- Timeout idle : 30s
- Timeout connexion : 5s
- SSL désactivé (réseau interne Docker)

REQUÊTES UTILISÉES :
- information_schema.tables : Liste des tables
- information_schema.columns : Détails des colonnes
- information_schema.table_constraints : Contraintes FK
- SELECT COUNT(*) : Nombre d'enregistrements

SÉCURITÉ :
- Pas d'exposition de données sensibles
- Lecture seule (aucune modification)
- Accès admin uniquement
- Production uniquement

===============================================
HISTORIQUE DES CORRECTIONS
===============================================

PROBLÈME INITIAL :
- Erreur : "Cannot read properties of undefined (reading 'query')"
- Cause : (storage as any).db.query non disponible en production

SOLUTION APPLIQUÉE :
- Import direct : import { db, pool } from "./db"
- Utilisation : pool.query() au lieu de storage.db.query()
- Vérification : if (!pool) throw Error()
- Test : Fonctionnel en production

DATE : 12 août 2025
STATUT : ✅ Résolu et fonctionnel

===============================================