Implémentation du service de configuration dynamique pour le déploiement on-premise de l'application. Nouveaux fichiers : - entities/configuration.entity.ts : Entité TypeORM - modules/config/config.service.ts : Service avec cache et encryption - modules/config/config.module.ts : Module NestJS - modules/config/index.ts : Export centralisé Fonctionnalités : ✅ Cache en mémoire au démarrage (16 configurations) ✅ Chiffrement AES-256-CBC pour valeurs sensibles ✅ Conversion automatique de types (string/number/boolean/json) ✅ Méthodes get/set avec traçabilité ✅ Récupération par catégorie (email/app/security) ✅ Masquage automatique des mots de passe ✅ Support setup wizard (isSetupCompleted) Sécurité : - Clé de chiffrement depuis CONFIG_ENCRYPTION_KEY - Format iv:encrypted pour AES-256-CBC - Mots de passe masqués dans les API Intégration : - AppConfigModule ajouté à app.module.ts - Service global exporté pour utilisation dans toute l'app - Chargement automatique au démarrage (OnModuleInit) Tests : ✅ Build Docker réussi ✅ 16 configurations chargées en cache ✅ Service démarré sans erreur Ref: #5
40 lines
935 B
TypeScript
40 lines
935 B
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
ManyToOne,
|
|
JoinColumn,
|
|
CreateDateColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
import { Users } from './users.entity';
|
|
|
|
@Entity('configuration')
|
|
export class Configuration {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column({ type: 'varchar', length: 100, unique: true, nullable: false })
|
|
cle: string;
|
|
|
|
@Column({ type: 'text', nullable: true })
|
|
valeur: string | null;
|
|
|
|
@Column({ type: 'varchar', length: 50, nullable: false })
|
|
type: 'string' | 'number' | 'boolean' | 'json' | 'encrypted';
|
|
|
|
@Column({ type: 'varchar', length: 50, nullable: true })
|
|
categorie: 'email' | 'app' | 'security' | null;
|
|
|
|
@Column({ type: 'text', nullable: true })
|
|
description: string | null;
|
|
|
|
@UpdateDateColumn({ name: 'modifie_le' })
|
|
modifieLe: Date;
|
|
|
|
@ManyToOne(() => Users, { nullable: true })
|
|
@JoinColumn({ name: 'modifie_par' })
|
|
modifiePar: Users | null;
|
|
}
|
|
|