feat: Version 3.5.2 - Configuration Stripe et gestion des immeubles
- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD) * DEV: Clés TEST Pierre (mode test) * REC: Clés TEST Client (mode test) * PROD: Clés LIVE Client (mode live) - Ajout de la gestion des bases de données immeubles/bâtiments * Configuration buildings_database pour DEV/REC/PROD * Service BuildingService pour enrichissement des adresses - Optimisations pages et améliorations ergonomie - Mises à jour des dépendances Composer - Nettoyage des fichiers obsolètes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
34
api/scripts/sql/add_unique_constraints_SIMPLE.sql
Normal file
34
api/scripts/sql/add_unique_constraints_SIMPLE.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
-- ========================================
|
||||
-- Script SIMPLE d'ajout de contraintes UNIQUE
|
||||
-- Pour tables avec peu de données (pas de suppression de doublons)
|
||||
-- Date: 2025-10-10
|
||||
-- ========================================
|
||||
|
||||
USE pra_geo;
|
||||
|
||||
-- Vérifier d'abord s'il y a des doublons
|
||||
SELECT 'Vérification doublons ope_users...' as status;
|
||||
SELECT fk_operation, fk_user, COUNT(*) as count
|
||||
FROM ope_users
|
||||
GROUP BY fk_operation, fk_user
|
||||
HAVING count > 1;
|
||||
|
||||
SELECT 'Vérification doublons ope_users_sectors...' as status;
|
||||
SELECT fk_operation, fk_user, fk_sector, COUNT(*) as count
|
||||
FROM ope_users_sectors
|
||||
GROUP BY fk_operation, fk_user, fk_sector
|
||||
HAVING count > 1;
|
||||
|
||||
-- Ajouter les contraintes UNIQUE directement
|
||||
-- Si des doublons existent, MySQL retournera une erreur explicite
|
||||
ALTER TABLE ope_users
|
||||
ADD UNIQUE KEY `idx_operation_user` (`fk_operation`, `fk_user`);
|
||||
|
||||
ALTER TABLE ope_users_sectors
|
||||
ADD UNIQUE KEY `idx_operation_user_sector` (`fk_operation`, `fk_user`, `fk_sector`);
|
||||
|
||||
-- Vérification
|
||||
SHOW INDEX FROM ope_users WHERE Key_name = 'idx_operation_user';
|
||||
SHOW INDEX FROM ope_users_sectors WHERE Key_name = 'idx_operation_user_sector';
|
||||
|
||||
SELECT 'TERMINÉ ✓' as status;
|
||||
59
api/scripts/sql/add_unique_constraints_ope_tables.sql
Normal file
59
api/scripts/sql/add_unique_constraints_ope_tables.sql
Normal file
@@ -0,0 +1,59 @@
|
||||
-- ========================================
|
||||
-- Script d'ajout de contraintes UNIQUE
|
||||
-- Pour éviter les doublons dans ope_users et ope_users_sectors
|
||||
-- Date: 2025-10-10
|
||||
-- ========================================
|
||||
|
||||
USE pra_geo;
|
||||
|
||||
-- ========================================
|
||||
-- 1. TABLE ope_users
|
||||
-- ========================================
|
||||
|
||||
-- Vérifier et supprimer les doublons existants avant d'ajouter la contrainte
|
||||
-- (Garde la première occurrence, supprime les duplicatas)
|
||||
DELETE ou1 FROM ope_users ou1
|
||||
INNER JOIN ope_users ou2
|
||||
WHERE ou1.id > ou2.id
|
||||
AND ou1.fk_operation = ou2.fk_operation
|
||||
AND ou1.fk_user = ou2.fk_user;
|
||||
|
||||
-- Ajouter la contrainte UNIQUE sur (fk_operation, fk_user)
|
||||
ALTER TABLE ope_users
|
||||
ADD UNIQUE KEY `idx_operation_user` (`fk_operation`, `fk_user`);
|
||||
|
||||
-- ========================================
|
||||
-- 2. TABLE ope_users_sectors
|
||||
-- ========================================
|
||||
|
||||
-- Vérifier et supprimer les doublons existants avant d'ajouter la contrainte
|
||||
-- (Garde la première occurrence, supprime les duplicatas)
|
||||
DELETE ous1 FROM ope_users_sectors ous1
|
||||
INNER JOIN ope_users_sectors ous2
|
||||
WHERE ous1.id > ous2.id
|
||||
AND ous1.fk_operation = ous2.fk_operation
|
||||
AND ous1.fk_user = ous2.fk_user
|
||||
AND ous1.fk_sector = ous2.fk_sector;
|
||||
|
||||
-- Ajouter la contrainte UNIQUE sur (fk_operation, fk_user, fk_sector)
|
||||
ALTER TABLE ope_users_sectors
|
||||
ADD UNIQUE KEY `idx_operation_user_sector` (`fk_operation`, `fk_user`, `fk_sector`);
|
||||
|
||||
-- ========================================
|
||||
-- Vérification
|
||||
-- ========================================
|
||||
|
||||
-- Vérifier les contraintes ajoutées
|
||||
SHOW INDEX FROM ope_users WHERE Key_name = 'idx_operation_user';
|
||||
SHOW INDEX FROM ope_users_sectors WHERE Key_name = 'idx_operation_user_sector';
|
||||
|
||||
-- Compter les doublons restants (devrait retourner 0 lignes)
|
||||
SELECT fk_operation, fk_user, COUNT(*) as count
|
||||
FROM ope_users
|
||||
GROUP BY fk_operation, fk_user
|
||||
HAVING count > 1;
|
||||
|
||||
SELECT fk_operation, fk_user, fk_sector, COUNT(*) as count
|
||||
FROM ope_users_sectors
|
||||
GROUP BY fk_operation, fk_user, fk_sector
|
||||
HAVING count > 1;
|
||||
70
api/scripts/sql/add_unique_constraints_ope_tables_FAST.sql
Normal file
70
api/scripts/sql/add_unique_constraints_ope_tables_FAST.sql
Normal file
@@ -0,0 +1,70 @@
|
||||
-- ========================================
|
||||
-- Script OPTIMISÉ d'ajout de contraintes UNIQUE
|
||||
-- Pour tables avec beaucoup de données
|
||||
-- Date: 2025-10-10
|
||||
-- ========================================
|
||||
|
||||
USE pra_geo;
|
||||
|
||||
-- ========================================
|
||||
-- OPTION 1 : Compter les doublons d'abord
|
||||
-- ========================================
|
||||
|
||||
SELECT 'Analyse des doublons dans ope_users...' as status;
|
||||
SELECT COUNT(*) as total_rows,
|
||||
COUNT(DISTINCT fk_operation, fk_user) as unique_combinations,
|
||||
COUNT(*) - COUNT(DISTINCT fk_operation, fk_user) as duplicates
|
||||
FROM ope_users;
|
||||
|
||||
SELECT 'Analyse des doublons dans ope_users_sectors...' as status;
|
||||
SELECT COUNT(*) as total_rows,
|
||||
COUNT(DISTINCT fk_operation, fk_user, fk_sector) as unique_combinations,
|
||||
COUNT(*) - COUNT(DISTINCT fk_operation, fk_user, fk_sector) as duplicates
|
||||
FROM ope_users_sectors;
|
||||
|
||||
-- ========================================
|
||||
-- OPTION 2 : Supprimer RAPIDEMENT les doublons
|
||||
-- Créer une table temporaire avec les IDs à garder
|
||||
-- ========================================
|
||||
|
||||
-- Pour ope_users
|
||||
CREATE TEMPORARY TABLE ope_users_to_keep AS
|
||||
SELECT MIN(id) as id_to_keep, fk_operation, fk_user
|
||||
FROM ope_users
|
||||
GROUP BY fk_operation, fk_user;
|
||||
|
||||
-- Supprimer tous les doublons (plus rapide avec NOT IN + subquery)
|
||||
DELETE FROM ope_users
|
||||
WHERE id NOT IN (SELECT id_to_keep FROM ope_users_to_keep);
|
||||
|
||||
DROP TEMPORARY TABLE ope_users_to_keep;
|
||||
|
||||
-- Pour ope_users_sectors
|
||||
CREATE TEMPORARY TABLE ope_users_sectors_to_keep AS
|
||||
SELECT MIN(id) as id_to_keep, fk_operation, fk_user, fk_sector
|
||||
FROM ope_users_sectors
|
||||
GROUP BY fk_operation, fk_user, fk_sector;
|
||||
|
||||
DELETE FROM ope_users_sectors
|
||||
WHERE id NOT IN (SELECT id_to_keep FROM ope_users_sectors_to_keep);
|
||||
|
||||
DROP TEMPORARY TABLE ope_users_sectors_to_keep;
|
||||
|
||||
-- ========================================
|
||||
-- OPTION 3 : Ajouter les contraintes UNIQUE
|
||||
-- ========================================
|
||||
|
||||
ALTER TABLE ope_users
|
||||
ADD UNIQUE KEY `idx_operation_user` (`fk_operation`, `fk_user`);
|
||||
|
||||
ALTER TABLE ope_users_sectors
|
||||
ADD UNIQUE KEY `idx_operation_user_sector` (`fk_operation`, `fk_user`, `fk_sector`);
|
||||
|
||||
-- ========================================
|
||||
-- Vérification finale
|
||||
-- ========================================
|
||||
|
||||
SHOW INDEX FROM ope_users WHERE Key_name = 'idx_operation_user';
|
||||
SHOW INDEX FROM ope_users_sectors WHERE Key_name = 'idx_operation_user_sector';
|
||||
|
||||
SELECT 'TERMINÉ - Contraintes UNIQUE ajoutées avec succès' as status;
|
||||
181
api/scripts/sql/truncate_data_tables.sql
Normal file
181
api/scripts/sql/truncate_data_tables.sql
Normal file
@@ -0,0 +1,181 @@
|
||||
-- =========================================================
|
||||
-- Script de vidage des tables de données (PRODUCTION)
|
||||
-- Option B : Vider TOUTES les tables SAUF x_* et entité 1
|
||||
-- Conserve les tables de référence x_*
|
||||
-- Conserve l'entité id=1 (super admins) et ses users/opérations
|
||||
-- Date: 2025-10-09
|
||||
-- =========================================================
|
||||
|
||||
-- Désactiver les contraintes de clés étrangères temporairement
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- =========================================================
|
||||
-- TABLES CHAT
|
||||
-- =========================================================
|
||||
TRUNCATE TABLE chat_read_receipts;
|
||||
TRUNCATE TABLE chat_messages;
|
||||
TRUNCATE TABLE chat_participants;
|
||||
TRUNCATE TABLE chat_rooms;
|
||||
|
||||
-- =========================================================
|
||||
-- TABLES EMAIL
|
||||
-- =========================================================
|
||||
TRUNCATE TABLE email_queue;
|
||||
TRUNCATE TABLE email_counter;
|
||||
|
||||
-- =========================================================
|
||||
-- TABLES SÉCURITÉ
|
||||
-- =========================================================
|
||||
TRUNCATE TABLE sec_failed_login_attempts;
|
||||
TRUNCATE TABLE sec_blocked_ips;
|
||||
TRUNCATE TABLE sec_alerts;
|
||||
TRUNCATE TABLE sec_performance_metrics;
|
||||
|
||||
-- =========================================================
|
||||
-- TABLES STRIPE
|
||||
-- =========================================================
|
||||
TRUNCATE TABLE stripe_webhooks;
|
||||
TRUNCATE TABLE stripe_payment_history;
|
||||
TRUNCATE TABLE stripe_refunds;
|
||||
TRUNCATE TABLE stripe_terminal_readers;
|
||||
TRUNCATE TABLE stripe_android_certified_devices;
|
||||
-- NOTE: stripe_accounts conservé car lié à entites via FK
|
||||
|
||||
-- =========================================================
|
||||
-- TABLES DONNÉES MÉTIER (conserver entité 1)
|
||||
-- =========================================================
|
||||
|
||||
-- 1. Supprimer les devices des users (sauf entité 1)
|
||||
DELETE FROM user_devices
|
||||
WHERE fk_user IN (SELECT id FROM users WHERE fk_entite != 1);
|
||||
|
||||
-- 2. Supprimer les sessions (sauf users entité 1)
|
||||
DELETE FROM z_sessions
|
||||
WHERE fk_user IN (SELECT id FROM users WHERE fk_entite != 1);
|
||||
|
||||
-- 3. Supprimer les médias (sauf entité 1)
|
||||
DELETE FROM medias WHERE fk_entite != 1;
|
||||
|
||||
-- 4. Supprimer les comptes Stripe (sauf entité 1)
|
||||
DELETE FROM stripe_accounts WHERE fk_entite != 1;
|
||||
|
||||
-- 5. Supprimer l'historique des passages (sauf entité 1)
|
||||
DELETE FROM ope_pass_histo
|
||||
WHERE fk_pass IN (
|
||||
SELECT id FROM ope_pass
|
||||
WHERE fk_operation IN (
|
||||
SELECT id FROM operations WHERE fk_entite != 1
|
||||
)
|
||||
);
|
||||
|
||||
-- 6. Supprimer les passages (sauf ceux des opérations de l'entité 1)
|
||||
DELETE FROM ope_pass
|
||||
WHERE fk_operation IN (
|
||||
SELECT id FROM operations WHERE fk_entite != 1
|
||||
);
|
||||
|
||||
-- 7. Supprimer les associations users-sectors (sauf entité 1)
|
||||
DELETE FROM ope_users_sectors
|
||||
WHERE fk_operation IN (
|
||||
SELECT id FROM operations WHERE fk_entite != 1
|
||||
);
|
||||
|
||||
-- 8. Supprimer les associations users-operations (sauf entité 1)
|
||||
DELETE FROM ope_users
|
||||
WHERE fk_operation IN (
|
||||
SELECT id FROM operations WHERE fk_entite != 1
|
||||
);
|
||||
|
||||
-- 9. Supprimer les adresses de secteurs (sauf entité 1)
|
||||
DELETE FROM sectors_adresses
|
||||
WHERE fk_sector IN (
|
||||
SELECT id FROM ope_sectors WHERE fk_operation IN (
|
||||
SELECT id FROM operations WHERE fk_entite != 1
|
||||
)
|
||||
);
|
||||
|
||||
-- 10. Supprimer les secteurs (sauf ceux de l'entité 1)
|
||||
DELETE FROM ope_sectors
|
||||
WHERE fk_operation IN (
|
||||
SELECT id FROM operations WHERE fk_entite != 1
|
||||
);
|
||||
|
||||
-- 11. Supprimer les opérations (sauf celles de l'entité 1)
|
||||
DELETE FROM operations WHERE fk_entite != 1;
|
||||
|
||||
-- 12. Supprimer les utilisateurs (sauf ceux de l'entité 1)
|
||||
DELETE FROM users WHERE fk_entite != 1;
|
||||
|
||||
-- 13. Supprimer les entités (sauf l'entité 1)
|
||||
DELETE FROM entites WHERE id != 1;
|
||||
|
||||
-- 14. Vider la table params (paramètres globaux)
|
||||
TRUNCATE TABLE params;
|
||||
|
||||
-- Réactiver les contraintes de clés étrangères
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- =========================================================
|
||||
-- VÉRIFICATIONS POST-VIDAGE
|
||||
-- =========================================================
|
||||
|
||||
SELECT '========================================' as '';
|
||||
SELECT '=== TABLES DE DONNÉES (après vidage) ===' as '';
|
||||
SELECT '========================================' as '';
|
||||
|
||||
SELECT 'entites' as table_name, COUNT(*) as count FROM entites
|
||||
UNION ALL SELECT 'users', COUNT(*) FROM users
|
||||
UNION ALL SELECT 'operations', COUNT(*) FROM operations
|
||||
UNION ALL SELECT 'ope_sectors', COUNT(*) FROM ope_sectors
|
||||
UNION ALL SELECT 'ope_pass', COUNT(*) FROM ope_pass
|
||||
UNION ALL SELECT 'medias', COUNT(*) FROM medias
|
||||
UNION ALL SELECT 'user_devices', COUNT(*) FROM user_devices
|
||||
UNION ALL SELECT 'z_sessions', COUNT(*) FROM z_sessions;
|
||||
|
||||
SELECT '' as '';
|
||||
SELECT '========================================' as '';
|
||||
SELECT '=== TABLES CHAT (doivent être vides) ===' as '';
|
||||
SELECT '========================================' as '';
|
||||
|
||||
SELECT 'chat_rooms' as table_name, COUNT(*) as count FROM chat_rooms
|
||||
UNION ALL SELECT 'chat_messages', COUNT(*) FROM chat_messages
|
||||
UNION ALL SELECT 'chat_participants', COUNT(*) FROM chat_participants
|
||||
UNION ALL SELECT 'chat_read_receipts', COUNT(*) FROM chat_read_receipts;
|
||||
|
||||
SELECT '' as '';
|
||||
SELECT '========================================' as '';
|
||||
SELECT '=== TABLES STRIPE (vides sauf accounts) ===' as '';
|
||||
SELECT '========================================' as '';
|
||||
|
||||
SELECT 'stripe_accounts' as table_name, COUNT(*) as count FROM stripe_accounts
|
||||
UNION ALL SELECT 'stripe_webhooks', COUNT(*) FROM stripe_webhooks
|
||||
UNION ALL SELECT 'stripe_terminal_readers', COUNT(*) FROM stripe_terminal_readers
|
||||
UNION ALL SELECT 'stripe_android_certified_devices', COUNT(*) FROM stripe_android_certified_devices;
|
||||
|
||||
SELECT '' as '';
|
||||
SELECT '========================================' as '';
|
||||
SELECT '=== ENTITÉ 1 (doit être conservée) ===' as '';
|
||||
SELECT '========================================' as '';
|
||||
|
||||
SELECT id, encrypted_name, encrypted_email, chk_active FROM entites WHERE id = 1;
|
||||
|
||||
SELECT '' as '';
|
||||
SELECT 'Nombre de users entité 1:' as info, COUNT(*) as count FROM users WHERE fk_entite = 1;
|
||||
SELECT 'Nombre d\'opérations entité 1:' as info, COUNT(*) as count FROM operations WHERE fk_entite = 1;
|
||||
|
||||
SELECT '' as '';
|
||||
SELECT '========================================' as '';
|
||||
SELECT '=== TABLES x_* (doivent être remplies) ===' as '';
|
||||
SELECT '========================================' as '';
|
||||
|
||||
SELECT 'x_devises' as table_name, COUNT(*) as count FROM x_devises
|
||||
UNION ALL SELECT 'x_pays', COUNT(*) FROM x_pays
|
||||
UNION ALL SELECT 'x_regions', COUNT(*) FROM x_regions
|
||||
UNION ALL SELECT 'x_departements', COUNT(*) FROM x_departements
|
||||
UNION ALL SELECT 'x_villes', COUNT(*) FROM x_villes
|
||||
UNION ALL SELECT 'x_departements_contours', COUNT(*) FROM x_departements_contours
|
||||
UNION ALL SELECT 'x_entites_types', COUNT(*) FROM x_entites_types
|
||||
UNION ALL SELECT 'x_types_passages', COUNT(*) FROM x_types_passages
|
||||
UNION ALL SELECT 'x_types_reglements', COUNT(*) FROM x_types_reglements
|
||||
UNION ALL SELECT 'x_users_roles', COUNT(*) FROM x_users_roles
|
||||
UNION ALL SELECT 'x_users_titres', COUNT(*) FROM x_users_titres;
|
||||
Reference in New Issue
Block a user