📊 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
📋 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)
});
}
}