diff --git a/COMMANDES_PRODUCTION.md b/COMMANDES_PRODUCTION.md index 5f93569..fde4463 100644 --- a/COMMANDES_PRODUCTION.md +++ b/COMMANDES_PRODUCTION.md @@ -1,21 +1,38 @@ -# MIGRATION PRODUCTION URGENTE - DLC Stock Épuisé +# COMMANDES PRODUCTION - Solution Immédiate -## Problème -``` -Error: column dlc_products.stock_epuise does not exist -``` +## SOLUTION URGENTE (2 minutes) -## Solution Rapide - -### Option 1: Migration SQL directe +### Commande 1: Appliquer la migration DLC ```bash -# Connectez-vous à votre base PostgreSQL de production -psql -h [VOTRE_HOST] -U [VOTRE_USER] -d [VOTRE_DB] -f MIGRATION_PRODUCTION_URGENTE.sql +docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db -f - << 'EOF' +ALTER TABLE dlc_products +ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL, +ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255), +ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp; + +CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise); + +UPDATE dlc_products SET stock_epuise = false WHERE stock_epuise IS NULL; + +SELECT 'Migration DLC terminée' as status; +EOF ``` -### Option 2: Commandes manuelles -```sql --- Connectez-vous à votre base et exécutez : +### Commande 2: Redémarrer l'application +```bash +docker-compose restart logiflow +``` + +### Alternative si la première ne marche pas: +```bash +# Option A: Via fichier SQL +docker cp MIGRATION_PRODUCTION_URGENTE.sql [CONTAINER_NAME]:/tmp/migration.sql +docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db -f /tmp/migration.sql + +# Option B: Connexion directe +docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db + +# Dans psql, coller: ALTER TABLE dlc_products ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL, ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255), @@ -24,34 +41,27 @@ ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp; CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise); ``` -### Option 3: Via Docker (si vous utilisez notre docker-compose) +## Vérification ```bash -# Sur votre serveur de production -./scripts/production-deploy-dlc-stock.sh +# Vérifier que les colonnes existent +docker-compose exec logiflow-db psql -U logiflow_admin -d logiflow_db -c " +SELECT column_name, data_type +FROM information_schema.columns +WHERE table_name='dlc_products' +AND column_name LIKE '%stock_epuise%'; +" + +# Vérifier les logs de l'application +docker-compose logs logiflow | tail -20 ``` -## Vérification après migration -```sql -SELECT EXISTS ( - SELECT FROM information_schema.columns - WHERE table_name='dlc_products' - AND column_name='stock_epuise' -); +## Résultat attendu +``` + column_name | data_type +--------------------+------------------- + stock_epuise | boolean + stock_epuise_at | timestamp without time zone + stock_epuise_by | character varying ``` -Résultat attendu: `t` (true) - -## Redémarrage application -Après la migration, redémarrez votre application : -```bash -# Si Docker -docker-compose restart logiflow - -# Ou selon votre setup -systemctl restart votre-service -``` - -## Vérification fonctionnelle -1. L'erreur "column does not exist" doit disparaître -2. L'interface DLC doit afficher les boutons PackageX et RotateCcw -3. Les fonctionnalités stock épuisé doivent être opérationnelles \ No newline at end of file +L'erreur "column does not exist" disparaîtra immédiatement. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 53097a7..3939f79 100644 --- a/Dockerfile +++ b/Dockerfile @@ -114,5 +114,5 @@ RUN chmod +x /app/scripts/auto-migrate-production.sh && \ ls -la /app/scripts/ && \ test -f /app/scripts/docker-entrypoint.sh || echo "ERREUR: docker-entrypoint.sh manquant" -# Apply migrations and start application -CMD ["sh", "-c", "if [ -f /app/scripts/auto-sync-migrations.sh ]; then /app/scripts/auto-sync-migrations.sh; fi && node dist/index.js"] \ No newline at end of file +# Apply DLC migration directly and start application +CMD ["sh", "-c", "echo 'Applying DLC migration...'; if [ -n \"$DATABASE_URL\" ]; then psql \"$DATABASE_URL\" -c 'ALTER TABLE dlc_products ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL, ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255), ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp; CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise);' || echo 'Migration already applied or failed'; fi; node dist/index.js"] \ No newline at end of file diff --git a/MIGRATION_PRODUCTION_URGENTE.sql b/MIGRATION_PRODUCTION_URGENTE.sql index b8c96ef..ceea0a6 100644 --- a/MIGRATION_PRODUCTION_URGENTE.sql +++ b/MIGRATION_PRODUCTION_URGENTE.sql @@ -1,60 +1,24 @@ --- MIGRATION URGENTE PRODUCTION - DLC Stock Épuisé --- Date: 2025-08-18 --- À exécuter sur votre serveur de production privé +-- MIGRATION URGENTE PRODUCTION DLC +-- Exécutez cette commande directement sur votre serveur --- Vérification que la table dlc_products existe -DO $$ -BEGIN - IF NOT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'dlc_products') THEN - RAISE EXCEPTION 'ERREUR: La table dlc_products n''existe pas'; - END IF; - RAISE NOTICE 'OK: Table dlc_products trouvée'; -END -$$; - --- Vérification des colonnes existantes avant migration -SELECT 'AVANT MIGRATION - Colonnes actuelles:' as status; -SELECT column_name FROM information_schema.columns -WHERE table_name = 'dlc_products' -AND column_name IN ('stock_epuise', 'stock_epuise_by', 'stock_epuise_at') -ORDER BY column_name; - --- Migration sécurisée - Ajout des colonnes DLC stock épuisé +-- Ajout des colonnes DLC stock épuisé ALTER TABLE dlc_products ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL, ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255), ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp; --- Commentaires pour documenter les nouveaux champs -COMMENT ON COLUMN dlc_products.stock_epuise IS 'Indique si le produit est marqué comme stock épuisé (différent de périmé)'; -COMMENT ON COLUMN dlc_products.stock_epuise_by IS 'ID de l''utilisateur qui a marqué le produit comme stock épuisé'; -COMMENT ON COLUMN dlc_products.stock_epuise_at IS 'Date et heure de marquage du stock épuisé'; - --- Index pour améliorer les performances +-- Index pour performance CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise); --- Initialiser tous les produits existants comme stock disponible +-- Initialisation des valeurs UPDATE dlc_products SET stock_epuise = false WHERE stock_epuise IS NULL; --- Vérification finale -SELECT 'APRÈS MIGRATION - Vérification:' as status; +-- Vérification SELECT - column_name, - data_type, - is_nullable, - column_default + 'Migration DLC terminée' as status, + COUNT(*) as colonnes_ajoutees FROM information_schema.columns WHERE table_name = 'dlc_products' -AND column_name IN ('stock_epuise', 'stock_epuise_by', 'stock_epuise_at') -ORDER BY column_name; - --- Statistiques après migration -SELECT - COUNT(*) as total_produits, - COUNT(CASE WHEN stock_epuise = true THEN 1 END) as stock_epuise, - COUNT(CASE WHEN stock_epuise = false THEN 1 END) as stock_disponible -FROM dlc_products; - -SELECT 'MIGRATION TERMINÉE AVEC SUCCÈS' as status; \ No newline at end of file +AND column_name IN ('stock_epuise', 'stock_epuise_by', 'stock_epuise_at'); \ No newline at end of file