From c3e9d39034e5afc3f2c3a12c8c7682eabe360b7d Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Fri, 29 May 2026 22:35:18 +1000 Subject: Modified controller endpoints to throw exceptions instead of returning HTTP responses on error --- Controllers/MediaController.cs | 116 +++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 63 deletions(-) (limited to 'Controllers/MediaController.cs') diff --git a/Controllers/MediaController.cs b/Controllers/MediaController.cs index 6a9e1fc..248765a 100644 --- a/Controllers/MediaController.cs +++ b/Controllers/MediaController.cs @@ -39,7 +39,7 @@ public class MediaController : Controller { .Include(m => m.CurrentUploadedFile) .First(m => m.Guid == mediaId); if(media is null) - return NotFound(); + throw new ObjectNotFoundException([ mediaId ]); // Check if the requested media item is a HEIC image and if it is, convert it // otherwise, return the original file content, unaltered @@ -68,14 +68,8 @@ public class MediaController : Controller { [FromQuery(Name = "w")] int? width, [FromQuery(Name = "h")] int? height) { - try { - var thumb = mediaService.GetThumbnail(mediaId, width, height); - return new FileStreamResult(thumb, "image/jpeg"); - } catch(ThumbnailException e) { - return BadRequest(e.Message); - } catch(ObjectNotFoundException e) { - return NotFound(e.Message); - } + var thumb = mediaService.GetThumbnail(mediaId, width, height); + return new FileStreamResult(thumb, "image/jpeg"); } [HttpDelete("{mediaId}")] @@ -86,65 +80,61 @@ public class MediaController : Controller { [HttpPost] public IActionResult Upload() { if(Request.Form.Files.Count == 0) - return BadRequest("No files"); + throw new ApiModels.ArgumentException("No files"); Media media = new(); foreach(var formFile in Request.Form.Files) { - try { - // Parse timestamps from headers - DateTime? lastAccessTime = - formFile.Headers["X-HyperBooru-LastAccessTime"] - .ElementAtOrDefault(0)? - .TryParseDateTimeUtc(); - DateTime? lastWriteTime = - formFile.Headers["X-HyperBooru-LastWriteTime"] - .ElementAtOrDefault(0)? - .TryParseDateTimeUtc(); - DateTime? createTime = - formFile.Headers["X-HyperBooru-CreateTime"] - .ElementAtOrDefault(0)? - .TryParseDateTimeUtc(); - - // Parse original path from headers - string? path = - formFile.Headers["X-HyperBooru-Path"] - .ElementAtOrDefault(0); - - object? pathType = null; - string? pathTypeString = - formFile.Headers["X-HyperBooru-PathType"] - .ElementAtOrDefault(0); - Enum.TryParse(typeof(PathType), pathTypeString, true, out pathType); - - // Parse tag IDs from headers - Guid[]? tagIds = formFile.Headers["X-HyperBooru-Tags"] + // Parse timestamps from headers + DateTime? lastAccessTime = + formFile.Headers["X-HyperBooru-LastAccessTime"] + .ElementAtOrDefault(0)? + .TryParseDateTimeUtc(); + DateTime? lastWriteTime = + formFile.Headers["X-HyperBooru-LastWriteTime"] + .ElementAtOrDefault(0)? + .TryParseDateTimeUtc(); + DateTime? createTime = + formFile.Headers["X-HyperBooru-CreateTime"] .ElementAtOrDefault(0)? - .Split(',') - .Select(t => Guid.Parse(t)) - .ToArray(); - - media = mediaService.Create( - formFile.OpenReadStream(), - formFile.FileName, - formFile.Headers["X-HyperBooru-Checksum"] - .ElementAtOrDefault(0), - lastAccessTime, - lastWriteTime, - createTime, - path, - (PathType?) pathType, - tagIds); - - // Return the GUID of the new media object if requested - bool returnMetadataParsed = bool.TryParse( - formFile.Headers["X-HyperBooru-ReturnMediaId"], out var returnMetadata); - - if(returnMetadataParsed && returnMetadata) - return Content(media.Guid.ToString()); - } catch(MediaCreateException e) { - return BadRequest(e.Message); - } + .TryParseDateTimeUtc(); + + // Parse original path from headers + string? path = + formFile.Headers["X-HyperBooru-Path"] + .ElementAtOrDefault(0); + + object? pathType = null; + string? pathTypeString = + formFile.Headers["X-HyperBooru-PathType"] + .ElementAtOrDefault(0); + Enum.TryParse(typeof(PathType), pathTypeString, true, out pathType); + + // Parse tag IDs from headers + Guid[]? tagIds = formFile.Headers["X-HyperBooru-Tags"] + .ElementAtOrDefault(0)? + .Split(',') + .Select(t => Guid.Parse(t)) + .ToArray(); + + media = mediaService.Create( + formFile.OpenReadStream(), + formFile.FileName, + formFile.Headers["X-HyperBooru-Checksum"] + .ElementAtOrDefault(0), + lastAccessTime, + lastWriteTime, + createTime, + path, + (PathType?) pathType, + tagIds); + + // Return the GUID of the new media object if requested + bool returnMetadataParsed = bool.TryParse( + formFile.Headers["X-HyperBooru-ReturnMediaId"], out var returnMetadata); + + if(returnMetadataParsed && returnMetadata) + return Content(media.Guid.ToString()); } if(Request.Form.Files.Count == 1) -- cgit v1.3