Implémentation de l'API REST pour la gestion de la configuration système par les administrateurs. Nouveaux fichiers : - modules/config/config.controller.ts : Controller REST - modules/config/dto/update-config.dto.ts : DTO mise à jour - modules/config/dto/test-smtp.dto.ts : DTO test SMTP Endpoints créés : ✅ GET /api/v1/configuration/setup/status → Vérifier si la configuration initiale est terminée ✅ POST /api/v1/configuration/setup/complete → Marquer la configuration comme terminée ✅ POST /api/v1/configuration/test-smtp → Tester la connexion SMTP + envoi email de test ✅ PATCH /api/v1/configuration/bulk → Mise à jour multiple des configurations ✅ GET /api/v1/configuration → Récupérer toutes les configurations (admin) ✅ GET /api/v1/configuration/:category → Récupérer par catégorie (email/app/security) Fonctionnalités : - Validation des données avec class-validator - Test SMTP avec Nodemailer - Envoi d'email de test HTML - Gestion d'erreurs complète - Rechargement automatique du cache - Traçabilité des modifications Sécurité : - Guards commentés (à activer avec JWT) - Validation des catégories - Mots de passe masqués dans les réponses Dépendances ajoutées : - nodemailer ^6.9.16 - @types/nodemailer ^6.4.16 Tests effectués : ✅ GET /setup/status → {setupCompleted: false} ✅ GET /email → 8 configurations email ✅ Build Docker réussi ✅ Toutes les routes mappées correctement Ref: #6
68 lines
1.1 KiB
TypeScript
68 lines
1.1 KiB
TypeScript
import { IsString, IsOptional, IsNumber, IsBoolean, IsEmail, IsUrl } from 'class-validator';
|
|
|
|
export class UpdateConfigDto {
|
|
// Configuration Email (SMTP)
|
|
@IsOptional()
|
|
@IsString()
|
|
smtp_host?: string;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
smtp_port?: number;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
smtp_secure?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
smtp_auth_required?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
smtp_user?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
smtp_password?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
email_from_name?: string;
|
|
|
|
@IsOptional()
|
|
@IsEmail()
|
|
email_from_address?: string;
|
|
|
|
// Configuration Application
|
|
@IsOptional()
|
|
@IsString()
|
|
app_name?: string;
|
|
|
|
@IsOptional()
|
|
@IsUrl()
|
|
app_url?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
app_logo_url?: string;
|
|
|
|
// Configuration Sécurité
|
|
@IsOptional()
|
|
@IsNumber()
|
|
password_reset_token_expiry_days?: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
jwt_expiry_hours?: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
max_upload_size_mb?: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
bcrypt_rounds?: number;
|
|
}
|
|
|