summaryrefslogtreecommitdiff
path: root/Controllers/MediaController.cs
diff options
context:
space:
mode:
authorJake Mannens <jake@asger.xyz>2026-05-29 22:35:18 +1000
committerJake Mannens <jake@asger.xyz>2026-05-30 03:38:05 +1000
commitc3e9d39034e5afc3f2c3a12c8c7682eabe360b7d (patch)
tree73c5f43ec246f700a164ef700956b9d82b95f594 /Controllers/MediaController.cs
parentcfd9959de69f9ab52e846e8acd232dc30d20aa27 (diff)
Modified controller endpoints to throw exceptions instead of returning HTTP responses on error
Diffstat (limited to 'Controllers/MediaController.cs')
-rw-r--r--Controllers/MediaController.cs106
1 files changed, 48 insertions, 58 deletions
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 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);
+ // 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);
+ 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();
+ // 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);
+ 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);
+ // 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);
- }
+ if(returnMetadataParsed && returnMetadata)
+ return Content(media.Guid.ToString());
}
if(Request.Form.Files.Count == 1)