petitspas/backend/src/modules/config/dto/update-config.dto.ts
Julien Martin eb1583b35b feat(backend): API admin configuration avec test SMTP (#6)
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
2025-11-28 17:00:55 +01:00

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;
}