← Volver a Back.Domain

AppSettings

Configuración principal de la aplicación

📊 Descripción General

La clase AppSettings representa la configuración principal de la aplicación RestMaster. Esta clase actúa como contenedor principal que agrupa todas las configuraciones específicas del sistema, incluyendo conexiones a base de datos, configuraciones de acceso, API y Telegram.

🎯 Propósito de la Clase

  • Configuración Centralizada: Punto único de configuración
  • Inyección de Dependencias: Configuración para DI container
  • Configuración por Entorno: Diferentes configuraciones por ambiente
  • Validación de Configuración: Verificación de settings
  • Flexibilidad: Configuración modular

📋 Propiedades de AppSettings

ConnectionStrings

ConnectionStrings
Configuración de cadenas de conexión a bases de datos

Access

AccessSettings
Configuración de acceso y permisos del sistema

API

ApiSettings
Configuración específica de la API

TelegramConfiguration

TelegramConfiguration
Configuración para integración con Telegram

📋 Clase Relacionada: TelegramConfiguration

🎯 Propósito de TelegramConfiguration

La clase TelegramConfiguration contiene la configuración necesaria para la integración con Telegram, permitiendo el envío de notificaciones y alertas a través del bot de Telegram.

BotToken

string
Token del bot de Telegram para autenticación

ChatId

string
ID del chat donde se enviarán las notificaciones

💡 Ejemplo de Uso

// Configuración en appsettings.json { "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=RestMaster;Trusted_Connection=true;", "MasterConnection": "Server=localhost;Database=RestMaster_Master;Trusted_Connection=true;" }, "Access": { "JwtSecret": "your-secret-key-here", "JwtExpirationMinutes": 60, "RequireHttps": true }, "API": { "BaseUrl": "https://api.restmaster.com", "Version": "v1", "CorsOrigins": ["https://app.restmaster.com"] }, "TelegramConfiguration": { "BotToken": "1234567890:ABCdefGHIjklMNOpqrsTUVwxyz", "ChatId": "-1001234567890" } } // Configuración en Program.cs builder.Services.Configure<AppSettings>(builder.Configuration); // Inyección de dependencias builder.Services.AddSingleton(sp => sp.GetRequiredService<IOptions<AppSettings>>().Value); // Uso en servicios public class NotificationService { private readonly AppSettings _appSettings; public NotificationService(AppSettings appSettings) { _appSettings = appSettings; } public async Task SendTelegramNotificationAsync(string message) { var telegramConfig = _appSettings.TelegramConfiguration; if (string.IsNullOrEmpty(telegramConfig.BotToken) || string.IsNullOrEmpty(telegramConfig.ChatId)) { throw new InvalidOperationException("Telegram configuration is missing"); } // Lógica para enviar notificación var url = $"https://api.telegram.org/bot{telegramConfig.BotToken}/sendMessage"; var payload = new { chat_id = telegramConfig.ChatId, text = message, parse_mode = "HTML" }; // Enviar mensaje await SendTelegramMessageAsync(url, payload); } } // Validación de configuración public static class AppSettingsValidator { public static void ValidateAppSettings(AppSettings settings) { if (settings.ConnectionStrings == null) throw new ArgumentException("ConnectionStrings configuration is required"); if (settings.Access == null) throw new ArgumentException("Access configuration is required"); if (settings.API == null) throw new ArgumentException("API configuration is required"); if (string.IsNullOrEmpty(settings.Access.JwtSecret)) throw new ArgumentException("JWT Secret is required"); if (settings.Access.JwtExpirationMinutes <= 0) throw new ArgumentException("JWT Expiration must be greater than 0"); } } // Configuración por entorno public static class ConfigurationHelper { public static AppSettings GetAppSettings(IConfiguration configuration, IWebHostEnvironment environment) { var appSettings = new AppSettings(); configuration.Bind(appSettings); // Configuraciones específicas por entorno if (environment.IsDevelopment()) { // Configuraciones de desarrollo appSettings.API.BaseUrl = "https://localhost:5001"; } else if (environment.IsProduction()) { // Configuraciones de producción appSettings.Access.RequireHttps = true; } return appSettings; } } // Uso en controladores [ApiController] [Route("api/[controller]")] public class ConfigurationController : ControllerBase { private readonly AppSettings _appSettings; public ConfigurationController(AppSettings appSettings) { _appSettings = appSettings; } [HttpGet("info")] public IActionResult GetConfigurationInfo() { return Ok(new { ApiVersion = _appSettings.API.Version, BaseUrl = _appSettings.API.BaseUrl, HasTelegramConfig = !string.IsNullOrEmpty(_appSettings.TelegramConfiguration?.BotToken) }); } }

🔗 Integración con Otros Componentes

📚 Componentes Relacionados

  • Program.cs: Configuración de servicios
  • Startup.cs: Configuración de la aplicación
  • Services: Servicios que utilizan la configuración
  • Controllers: Controladores que acceden a configuración
  • Middleware: Middleware que usa configuración

🎯 Casos de Uso

  • Configuración de Base de Datos: Cadenas de conexión
  • Configuración de JWT: Autenticación y autorización
  • Configuración de API: URLs y versiones
  • Notificaciones: Integración con Telegram
  • Configuración por Entorno: Desarrollo, staging, producción
  • Validación de Configuración: Verificación de settings

🔧 Consideraciones Técnicas

⚙️ Configuración

  • Archivos de Configuración: appsettings.json, appsettings.{Environment}.json
  • Variables de Entorno: Configuración por entorno
  • User Secrets: Configuración sensible en desarrollo
  • Azure Key Vault: Configuración segura en producción

🔒 Seguridad

  • Información Sensible: No exponer en logs o respuestas
  • Encriptación: Encriptar configuraciones sensibles
  • Validación: Validar configuración al inicio
  • Auditoría: Registrar cambios de configuración