Files
mes-budgets-participatifs/docs/SETTINGS.md
2025-09-16 13:41:32 +02:00

145 lines
5.1 KiB
Markdown

# 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