using Common.Configuration.Arr; using Common.Configuration.ContentBlocker; using Common.Configuration.DownloadCleaner; using Common.Configuration.DownloadClient; using Common.Configuration.DTOs.Arr; using Common.Configuration.DTOs.ContentBlocker; using Common.Configuration.DTOs.DownloadCleaner; using Common.Configuration.DTOs.DownloadClient; using Common.Configuration.DTOs.General; using Common.Configuration.DTOs.IgnoredDownloads; using Common.Configuration.DTOs.Notification; using Common.Configuration.DTOs.QueueCleaner; using Common.Configuration.General; using Common.Configuration.IgnoredDownloads; using Common.Configuration.Notification; using Common.Configuration.QueueCleaner; using Infrastructure.Configuration; using Infrastructure.Services; using Mapster; using Microsoft.AspNetCore.Mvc; namespace Executable.Controllers; [ApiController] [Route("api/[controller]")] public class ConfigurationController : ControllerBase { private readonly ILogger _logger; private readonly IConfigManager _configManager; public ConfigurationController( ILogger logger, IConfigManager configManager) { _logger = logger; _configManager = configManager; } [HttpGet("queue_cleaner")] public async Task GetQueueCleanerConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("content_blocker")] public async Task GetContentBlockerConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("download_cleaner")] public async Task GetDownloadCleanerConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("download_client")] public async Task GetDownloadClientConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("ignored_downloads")] public async Task GetIgnoredDownloadsConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("general")] public async Task GetGeneralConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("sonarr")] public async Task GetSonarrConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("radarr")] public async Task GetRadarrConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("lidarr")] public async Task GetLidarrConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpGet("notifications")] public async Task GetNotificationsConfig() { var config = await _configManager.GetConfigurationAsync(); var dto = config.Adapt(); return Ok(dto); } [HttpPut("queue_cleaner")] public async Task UpdateQueueCleanerConfig([FromBody] QueueCleanerConfigUpdateDto dto) { // Get existing config var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save QueueCleaner configuration"); } return Ok(new { Message = "QueueCleaner configuration updated successfully" }); } [HttpPut("content_blocker")] public async Task UpdateContentBlockerConfig([FromBody] ContentBlockerConfigUpdateDto dto) { // Get existing config var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save ContentBlocker configuration"); } return Ok(new { Message = "ContentBlocker configuration updated successfully" }); } [HttpPut("download_cleaner")] public async Task UpdateDownloadCleanerConfig([FromBody] DownloadCleanerConfigUpdateDto dto) { // Get existing config var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save DownloadCleaner configuration"); } return Ok(new { Message = "DownloadCleaner configuration updated successfully" }); } [HttpPut("download_client")] public async Task UpdateDownloadClientConfig([FromBody] DownloadClientConfigUpdateDto dto) { // Get existing config to preserve sensitive data var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO, preserving sensitive data if not provided dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save DownloadClient configuration"); } return Ok(new { Message = "DownloadClient configuration updated successfully" }); } [HttpPut("ignored_downloads")] public async Task UpdateIgnoredDownloadsConfig([FromBody] IgnoredDownloadsConfigUpdateDto dto) { // Get existing config var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO dto.Adapt(config); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save IgnoredDownloads configuration"); } return Ok(new { Message = "IgnoredDownloads configuration updated successfully" }); } [HttpPut("general")] public async Task UpdateGeneralConfig([FromBody] GeneralConfigUpdateDto dto) { // Get existing config to preserve sensitive data var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO, preserving sensitive data if not provided dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save General configuration"); } return Ok(new { Message = "General configuration updated successfully" }); } [HttpPut("sonarr")] public async Task UpdateSonarrConfig([FromBody] SonarrConfigUpdateDto dto) { // Get existing config to preserve sensitive data var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO, preserving sensitive data if not provided dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save Sonarr configuration"); } return Ok(new { Message = "Sonarr configuration updated successfully" }); } [HttpPut("radarr")] public async Task UpdateRadarrConfig([FromBody] RadarrConfigUpdateDto dto) { // Get existing config to preserve sensitive data var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO, preserving sensitive data if not provided dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save Radarr configuration"); } return Ok(new { Message = "Radarr configuration updated successfully" }); } [HttpPut("lidarr")] public async Task UpdateLidarrConfig([FromBody] LidarrConfigUpdateDto dto) { // Get existing config to preserve sensitive data var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO, preserving sensitive data if not provided dto.Adapt(config); // Validate the configuration config.Validate(); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save Lidarr configuration"); } return Ok(new { Message = "Lidarr configuration updated successfully" }); } [HttpPut("notifications")] public async Task UpdateNotificationsConfig([FromBody] NotificationsConfigUpdateDto dto) { // Get existing config to preserve sensitive data var config = await _configManager.GetConfigurationAsync(); // Apply updates from DTO, preserving sensitive data if not provided dto.Adapt(config); // Persist the configuration var result = await _configManager.SaveConfigurationAsync(config); if (!result) { return StatusCode(500, "Failed to save Notifications configuration"); } return Ok(new { Message = "Notifications configuration updated successfully" }); } }