From 0c599bef2d715e97cd0182c021a1ff30cc199651 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Sun, 26 Apr 2026 14:17:31 +0300 Subject: [PATCH] Add missing TypedResults --- src/Sonarr.Api.V5/FileSystem/FileSystemController.cs | 4 ++-- src/Sonarr.Api.V5/History/HistoryController.cs | 2 +- src/Sonarr.Api.V5/Localization/LanguageController.cs | 1 + .../Profiles/Quality/QualityProfileSchemaController.cs | 1 + .../Profiles/Release/ReleaseProfileController.cs | 3 +++ src/Sonarr.Api.V5/Qualities/QualityDefinitionController.cs | 2 ++ src/Sonarr.Api.V5/Queue/QueueActionController.cs | 4 ++-- src/Sonarr.Api.V5/Queue/QueueController.cs | 1 + src/Sonarr.Api.V5/Series/SeriesFolderController.cs | 2 +- src/Sonarr.Api.V5/Series/SeriesImportController.cs | 2 ++ src/Sonarr.Api.V5/Settings/NamingSettingsController.cs | 7 +++++-- src/Sonarr.Api.V5/System/Backup/BackupController.cs | 6 +++--- src/Sonarr.Api.V5/System/SystemController.cs | 4 ++-- 13 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/Sonarr.Api.V5/FileSystem/FileSystemController.cs b/src/Sonarr.Api.V5/FileSystem/FileSystemController.cs index 820b41810..c47d0d894 100644 --- a/src/Sonarr.Api.V5/FileSystem/FileSystemController.cs +++ b/src/Sonarr.Api.V5/FileSystem/FileSystemController.cs @@ -37,11 +37,11 @@ public Ok GetEntityType(string path) { if (_diskProvider.FileExists(path)) { - return TypedResults.Ok((object)new { type = "file" }); + return TypedResults.Ok(new { type = "file" }); } // Return folder even if it doesn't exist on disk to avoid leaking anything from the UI about the underlying system - return TypedResults.Ok((object)new { type = "folder" }); + return TypedResults.Ok(new { type = "folder" }); } [HttpGet("mediafiles")] diff --git a/src/Sonarr.Api.V5/History/HistoryController.cs b/src/Sonarr.Api.V5/History/HistoryController.cs index f11b960d0..15f8bc805 100644 --- a/src/Sonarr.Api.V5/History/HistoryController.cs +++ b/src/Sonarr.Api.V5/History/HistoryController.cs @@ -163,7 +163,7 @@ public Ok> GetEpisodeHistory(int episodeId, EpisodeHistory }).ToList()); } - [HttpPost("failed/{id}")] + [HttpPost("failed/{id:int}")] public NoContent MarkAsFailed([FromRoute] int id) { _failedDownloadService.MarkAsFailed(id); diff --git a/src/Sonarr.Api.V5/Localization/LanguageController.cs b/src/Sonarr.Api.V5/Localization/LanguageController.cs index ddb5d188c..7f5ecdb97 100644 --- a/src/Sonarr.Api.V5/Localization/LanguageController.cs +++ b/src/Sonarr.Api.V5/Localization/LanguageController.cs @@ -22,6 +22,7 @@ protected override LanguageResource GetResourceById(int id) } [HttpGet] + [Produces("application/json")] public Ok> GetAll() { var languageResources = Language.All.Select(l => new LanguageResource diff --git a/src/Sonarr.Api.V5/Profiles/Quality/QualityProfileSchemaController.cs b/src/Sonarr.Api.V5/Profiles/Quality/QualityProfileSchemaController.cs index 838cef4ec..86b121698 100644 --- a/src/Sonarr.Api.V5/Profiles/Quality/QualityProfileSchemaController.cs +++ b/src/Sonarr.Api.V5/Profiles/Quality/QualityProfileSchemaController.cs @@ -17,6 +17,7 @@ public QualityProfileSchemaController(IQualityProfileService profileService) } [HttpGet] + [Produces("application/json")] public Ok GetSchema() { var qualityProfile = _profileService.GetDefaultProfile(string.Empty); diff --git a/src/Sonarr.Api.V5/Profiles/Release/ReleaseProfileController.cs b/src/Sonarr.Api.V5/Profiles/Release/ReleaseProfileController.cs index 88088a0e5..da8f2f7da 100644 --- a/src/Sonarr.Api.V5/Profiles/Release/ReleaseProfileController.cs +++ b/src/Sonarr.Api.V5/Profiles/Release/ReleaseProfileController.cs @@ -54,6 +54,7 @@ public ReleaseProfileController(IReleaseProfileService releaseProfileService, II } [RestPostById] + [Consumes("application/json")] public Results, NotFound> Create([FromBody] ReleaseProfileResource resource) { var model = resource.ToModel(); @@ -70,6 +71,7 @@ public NoContent DeleteProfile(int id) } [RestPutById] + [Consumes("application/json")] public Results, NotFound> Update([FromBody] ReleaseProfileResource resource) { var model = resource.ToModel(); @@ -85,6 +87,7 @@ protected override ReleaseProfileResource GetResourceById(int id) } [HttpGet] + [Produces("application/json")] public Ok> GetAll() { return TypedResults.Ok(_releaseProfileService.All().ToResource()); diff --git a/src/Sonarr.Api.V5/Qualities/QualityDefinitionController.cs b/src/Sonarr.Api.V5/Qualities/QualityDefinitionController.cs index bf52770f7..731db0e2b 100644 --- a/src/Sonarr.Api.V5/Qualities/QualityDefinitionController.cs +++ b/src/Sonarr.Api.V5/Qualities/QualityDefinitionController.cs @@ -50,12 +50,14 @@ protected override QualityDefinitionResource GetResourceById(int id) } [HttpGet] + [Produces("application/json")] public Ok> GetAll() { return TypedResults.Ok(_qualityDefinitionService.All().ToResource()); } [HttpPut] + [Consumes("application/json")] public Ok> UpdateMany([FromBody] List resource) { // Read from request diff --git a/src/Sonarr.Api.V5/Queue/QueueActionController.cs b/src/Sonarr.Api.V5/Queue/QueueActionController.cs index 3b4c97d86..d070463fc 100644 --- a/src/Sonarr.Api.V5/Queue/QueueActionController.cs +++ b/src/Sonarr.Api.V5/Queue/QueueActionController.cs @@ -22,7 +22,7 @@ public QueueActionController(IPendingReleaseService pendingReleaseService, } [HttpPost("grab/{id:int}")] - public async Task Grab([FromRoute] int id) + public async Task> Grab([FromRoute] int id) { var pendingRelease = _pendingReleaseService.FindPendingQueueItem(id); @@ -38,7 +38,7 @@ public async Task Grab([FromRoute] int id) [HttpPost("grab/bulk")] [Consumes("application/json")] - public async Task Grab([FromBody] QueueBulkResource resource) + public async Task> Grab([FromBody] QueueBulkResource resource) { foreach (var id in resource.Ids) { diff --git a/src/Sonarr.Api.V5/Queue/QueueController.cs b/src/Sonarr.Api.V5/Queue/QueueController.cs index 3ad9418be..ae658fbe9 100644 --- a/src/Sonarr.Api.V5/Queue/QueueController.cs +++ b/src/Sonarr.Api.V5/Queue/QueueController.cs @@ -95,6 +95,7 @@ public Results RemoveAction(int id, string? message = null, } [HttpDelete("bulk")] + [Consumes("application/json")] public NoContent RemoveMany([FromBody] QueueBulkResource resource, [FromQuery] string? message, [FromQuery] bool removeFromClient = true, [FromQuery] bool blocklist = false, [FromQuery] bool skipRedownload = false, [FromQuery] bool changeCategory = false) { var trackedDownloadIds = new List(); diff --git a/src/Sonarr.Api.V5/Series/SeriesFolderController.cs b/src/Sonarr.Api.V5/Series/SeriesFolderController.cs index fd1445d3b..5f6eff704 100644 --- a/src/Sonarr.Api.V5/Series/SeriesFolderController.cs +++ b/src/Sonarr.Api.V5/Series/SeriesFolderController.cs @@ -26,7 +26,7 @@ public Ok GetFolder([FromRoute] int id) var series = _seriesService.GetSeries(id); var folder = _fileNameBuilder.GetSeriesFolder(series); - return TypedResults.Ok((object)new + return TypedResults.Ok(new { folder }); diff --git a/src/Sonarr.Api.V5/Series/SeriesImportController.cs b/src/Sonarr.Api.V5/Series/SeriesImportController.cs index dd5543290..93fbe21c9 100644 --- a/src/Sonarr.Api.V5/Series/SeriesImportController.cs +++ b/src/Sonarr.Api.V5/Series/SeriesImportController.cs @@ -17,6 +17,8 @@ public SeriesImportController(IAddSeriesService addSeriesService) } [HttpPost] + [Consumes("application/json")] + [Produces("application/json")] public Ok> Import([FromBody] List resource) { var newSeries = resource.ToModel(); diff --git a/src/Sonarr.Api.V5/Settings/NamingSettingsController.cs b/src/Sonarr.Api.V5/Settings/NamingSettingsController.cs index 69d4fa48b..668e1cfd3 100644 --- a/src/Sonarr.Api.V5/Settings/NamingSettingsController.cs +++ b/src/Sonarr.Api.V5/Settings/NamingSettingsController.cs @@ -42,12 +42,14 @@ protected override NamingSettingsResource GetResourceById(int id) } [HttpGet] + [Produces("application/json")] public Ok GetNamingConfig() { return TypedResults.Ok(GetResourceById(1)); } [RestPutById] + [Consumes("application/json")] public Results, NotFound> UpdateNamingConfig([FromBody] NamingSettingsResource resource) { var nameSpec = resource.ToModel(); @@ -59,7 +61,8 @@ public Results, NotFound> UpdateNamingConfig([F } [HttpGet("examples")] - public object GetExamples([FromQuery]NamingSettingsResource settings) + [Produces("application/json")] + public Ok GetExamples([FromQuery] NamingSettingsResource settings) { if (settings.Id == 0) { @@ -107,7 +110,7 @@ public object GetExamples([FromQuery]NamingSettingsResource settings) ? null : _filenameSampleService.GetSpecialsFolderSample(nameSpec); - return sampleResource; + return TypedResults.Ok(sampleResource); } private void ValidateFormatResult(NamingConfig nameSpec) diff --git a/src/Sonarr.Api.V5/System/Backup/BackupController.cs b/src/Sonarr.Api.V5/System/Backup/BackupController.cs index 6c729d50d..b35876122 100644 --- a/src/Sonarr.Api.V5/System/Backup/BackupController.cs +++ b/src/Sonarr.Api.V5/System/Backup/BackupController.cs @@ -86,7 +86,7 @@ public Results, NotFound> Restore([FromRoute] int id) var path = GetBackupPath(backup); _backupService.Restore(path); - return TypedResults.Ok((object)new { RestartRequired = true }); + return TypedResults.Ok(new { RestartRequired = true }); } [HttpPost("restore/upload")] @@ -106,7 +106,7 @@ public Results, BadRequest> RestoreUpload() if (!ValidExtensions.Contains(extension)) { - return TypedResults.BadRequest((object)new { error = $"Invalid extension, must be one of: {string.Join(", ", ValidExtensions)}" }); + return TypedResults.BadRequest(new { error = $"Invalid extension, must be one of: {string.Join(", ", ValidExtensions)}" }); } var path = Path.Combine(_appFolderInfo.TempFolder, $"sonarr_backup_restore{extension}"); @@ -115,7 +115,7 @@ public Results, BadRequest> RestoreUpload() _backupService.Restore(path); _diskProvider.DeleteFile(path); - return TypedResults.Ok((object)new { RestartRequired = true }); + return TypedResults.Ok(new { RestartRequired = true }); } private string GetBackupPath(NzbDrone.Core.Backup.Backup backup) diff --git a/src/Sonarr.Api.V5/System/SystemController.cs b/src/Sonarr.Api.V5/System/SystemController.cs index 1a1ffd44c..5fd442c43 100644 --- a/src/Sonarr.Api.V5/System/SystemController.cs +++ b/src/Sonarr.Api.V5/System/SystemController.cs @@ -116,13 +116,13 @@ public Ok>> DuplicateRoutes() public Ok Shutdown() { Task.Factory.StartNew(() => _lifecycleService.Shutdown()); - return TypedResults.Ok((object)new { ShuttingDown = true }); + return TypedResults.Ok(new { ShuttingDown = true }); } [HttpPost("restart")] public Ok Restart() { Task.Factory.StartNew(() => _lifecycleService.Restart()); - return TypedResults.Ok((object)new { Restarting = true }); + return TypedResults.Ok(new { Restarting = true }); } }