# Paramètres de l'Application ## Vue d'ensemble L'application dispose maintenant d'un système de paramètres global qui permet de configurer le comportement de l'application. Les paramètres sont organisés par catégories pour une meilleure organisation. ## Accès aux paramètres 1. Connectez-vous à l'interface d'administration 2. Cliquez sur le bouton "Paramètres" dans la barre d'outils 3. Vous accédez à la page de configuration des paramètres ## Catégories de paramètres ### Affichage Cette catégorie contient les paramètres liés à l'affichage de l'interface utilisateur. #### Ordre aléatoire des propositions - **Clé** : `randomize_propositions` - **Type** : Booléen (true/false) - **Valeur par défaut** : `true` - **Description** : Lorsque activé, les propositions sont affichées dans un ordre aléatoire pour chaque participant lors du vote. **Comportement :** - **Désactivé (Off)** : Les propositions sont affichées dans l'ordre chronologique de création - **Activé (On)** : Les propositions sont mélangées aléatoirement pour chaque participant **Impact :** - Ce paramètre affecte uniquement la page de vote (`/campaigns/[id]/vote/[participantId]`) - L'ordre aléatoire est appliqué à chaque chargement de la page - Chaque participant voit un ordre différent, ce qui peut réduire les biais liés à l'ordre d'affichage ### Email Cette catégorie contient les paramètres de configuration SMTP pour l'envoi d'emails automatiques. #### Configuration SMTP - **smtp_host** : Serveur SMTP (ex: smtp.gmail.com) - **smtp_port** : Port SMTP (ex: 587 pour TLS, 465 pour SSL) - **smtp_username** : Nom d'utilisateur SMTP - **smtp_password** : Mot de passe SMTP (chiffré automatiquement) - **smtp_secure** : Connexion sécurisée SSL/TLS (booléen) - **smtp_from_email** : Adresse email d'expédition - **smtp_from_name** : Nom d'expédition **Sécurité :** - Le mot de passe SMTP est automatiquement chiffré avec AES-256-GCM avant stockage - La clé de chiffrement est dérivée de `SUPABASE_ANON_KEY` - Seules les personnes ayant accès à la clé peuvent déchiffrer le mot de passe **Fonctionnalités :** - Test de connexion SMTP intégré - Envoi d'email de test avec template HTML - Validation des paramètres avant sauvegarde - Interface avec masquage du mot de passe - Sauvegarde automatique avec feedback visuel ## Structure technique ### Base de données La table `settings` contient les paramètres : ```sql CREATE TABLE settings ( id UUID DEFAULT gen_random_uuid() PRIMARY KEY, key TEXT NOT NULL UNIQUE, value TEXT NOT NULL, category TEXT NOT NULL, description TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); ``` ### Services Le service `settingsService` fournit les méthodes suivantes : - `getAll()` : Récupère tous les paramètres - `getByCategory(category)` : Récupère les paramètres d'une catégorie - `getByKey(key)` : Récupère un paramètre par sa clé - `getValue(key, defaultValue)` : Récupère la valeur d'un paramètre - `getBooleanValue(key, defaultValue)` : Récupère la valeur booléenne d'un paramètre - `setValue(key, value)` : Définit la valeur d'un paramètre - `setBooleanValue(key, value)` : Définit la valeur booléenne d'un paramètre - `getSmtpSettings()` : Récupère tous les paramètres SMTP - `setSmtpSettings(settings)` : Sauvegarde les paramètres SMTP avec chiffrement - `testSmtpConnection(settings)` : Teste la connexion SMTP - `sendTestEmail(settings, toEmail)` : Envoie un email de test ### Chiffrement Le service `encryptionService` fournit les méthodes suivantes : - `encrypt(value)` : Chiffre une valeur avec AES-256-GCM - `decrypt(encryptedValue)` : Déchiffre une valeur chiffrée - `isEncrypted(value)` : Vérifie si une valeur est chiffrée - `mask(value)` : Masque une valeur pour l'affichage ### Utilisation dans le code ```typescript import { settingsService } from '@/lib/services'; // Récupérer un paramètre booléen const randomizePropositions = await settingsService.getBooleanValue('randomize_propositions', false); // Utiliser le paramètre if (randomizePropositions) { // Mélanger les propositions propositions.sort(() => Math.random() - 0.5); } // Récupérer les paramètres SMTP const smtpSettings = await settingsService.getSmtpSettings(); // Envoyer un email de test const result = await settingsService.sendTestEmail(smtpSettings, 'test@exemple.com'); ``` ## Migration Pour ajouter la table des paramètres à une base de données existante : 1. **Paramètres de base** : Exécutez le script SQL dans `migration-settings.sql` dans l'éditeur SQL de Supabase 2. **Paramètres SMTP** : Exécutez ensuite le script SQL dans `migration-smtp-settings.sql` ## Ajout de nouveaux paramètres Pour ajouter un nouveau paramètre : 1. Ajoutez l'insertion dans le script de migration 2. Utilisez le service `settingsService` dans votre code 3. Mettez à jour cette documentation ## Sécurité - Tous les paramètres sont accessibles en lecture publique - Seuls les administrateurs peuvent modifier les paramètres via l'interface d'administration - Les paramètres sont protégés par l'AuthGuard