diff options
| author | Jake Mannens <jake@asger.xyz> | 2026-05-29 22:35:18 +1000 |
|---|---|---|
| committer | Jake Mannens <jake@asger.xyz> | 2026-05-30 03:38:05 +1000 |
| commit | c3e9d39034e5afc3f2c3a12c8c7682eabe360b7d (patch) | |
| tree | 73c5f43ec246f700a164ef700956b9d82b95f594 /Controllers/ApiMediaController.cs | |
| parent | cfd9959de69f9ab52e846e8acd232dc30d20aa27 (diff) | |
Modified controller endpoints to throw exceptions instead of returning HTTP responses on error
Diffstat (limited to 'Controllers/ApiMediaController.cs')
| -rw-r--r-- | Controllers/ApiMediaController.cs | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/Controllers/ApiMediaController.cs b/Controllers/ApiMediaController.cs index 58fd043..bb6c81e 100644 --- a/Controllers/ApiMediaController.cs +++ b/Controllers/ApiMediaController.cs @@ -27,7 +27,7 @@ public class ApiMediaController : Controller { var media = await db.Media.FirstOrDefaultAsync(m => m.Guid == mediaId); if(media is null) - throw new ObjectNotFoundException(mediaId); + throw new ObjectNotFoundException([ mediaId ]); return Ok((ApiModels.Media) media); } @@ -41,7 +41,7 @@ public class ApiMediaController : Controller { .FirstOrDefaultAsync(m => m.Guid == mediaId); if(media is null) - throw new ObjectNotFoundException(mediaId); + throw new ObjectNotFoundException([ mediaId ]); return Ok(media.UploadedFiles.Select(uf => (ApiModels.UploadedFile) uf).ToArray()); } @@ -53,10 +53,10 @@ public class ApiMediaController : Controller { var media = await db.Media.FirstOrDefaultAsync(m => m.Guid == updatedMedia.MediaId); if(media is null) - return NotFound(); + throw new ObjectNotFoundException([ updatedMedia.MediaId ]); - media.ShortDescription = updatedMedia.ShortDescription.NullIfEmpty(); - media.LongDescription = updatedMedia.LongDescription.NullIfEmpty(); + media.ShortDescription = updatedMedia.ShortDescription?.NullIfEmpty(); + media.LongDescription = updatedMedia.LongDescription?.NullIfEmpty(); await db.SaveChangesAsync(); await transaction.CommitAsync(); @@ -67,9 +67,9 @@ public class ApiMediaController : Controller { [HttpPost] public IActionResult Upload() { if(Request.Form.Files.Count == 0) - return BadRequest("No files"); + throw new ApiModels.ArgumentException("No files"); if(Request.Form.Files.Count > 1) - return BadRequest("More than one file supplied"); + throw new ApiModels.ArgumentException("More than one file supplied"); var metadataString = Request.Form.Files .First() @@ -109,7 +109,7 @@ public class ApiMediaController : Controller { .ThenInclude(td => td.ImplicitTags) .FirstOrDefaultAsync(m => m.Guid == mediaId); if(media is null) - return NotFound(); + throw new ObjectNotFoundException([ mediaId ]); return Ok(media.Tags.Select(t => (ApiModels.TagDefinition) t.TagDefinition).ToArray()); } @@ -122,13 +122,15 @@ public class ApiMediaController : Controller { using var db = dbFactory.CreateDbContext(); using var transaction = await db.Database.BeginTransactionAsync(); + var missing = new List<Guid>(); + var media = await db.Media .Include(m => m.Tags) .ThenInclude(t => t.TagDefinition) .ThenInclude(td => td.ImplicitTags) .FirstOrDefaultAsync(m => m.Guid == mediaId); if(media is null) - return NotFound(); + missing.Add(mediaId); tagIds = tagIds.Distinct().ToArray(); @@ -136,8 +138,9 @@ public class ApiMediaController : Controller { .Where(td => tagIds.Contains(td.Guid)) .ToArrayAsync(); - if(tags.Count() < tagIds.Count()) - return NotFound("Invalid tag IDs specified"); + missing.AddRange(tagIds.Except(tags.Select(td => td.Guid))); + if(missing.Any()) + throw new ObjectNotFoundException(missing); media.Tags.AddRange(tags .Where(td => !media.Tags.Select(t => t.TagDefinition.Guid).Contains(td.Guid)) @@ -157,23 +160,24 @@ public class ApiMediaController : Controller { using var db = dbFactory.CreateDbContext(); using var transaction = await db.Database.BeginTransactionAsync(); + var missing = new List<Guid>(); + var media = await db.Media .Include(m => m.Tags) .ThenInclude(t => t.TagDefinition) .ThenInclude(td => td.ImplicitTags) .FirstOrDefaultAsync(m => m.Guid == mediaId); if(media is null) - return NotFound(); + missing.Add(mediaId); tagIds = tagIds.Distinct().Order().ToArray(); var tags = await db.TagDefinitions .Where(td => tagIds.Contains(td.Guid)) .ToArrayAsync(); - var missingTags = tagIds.Except(tags.Select(td => td.Guid)); - var missingTagsString = string.Join(", ", missingTags.Select(t => t.ToString())); - if(missingTags.Any()) - return BadRequest($"Invalid tag IDs specified: {missingTagsString}"); + missing.AddRange(tagIds.Except(tags.Select(td => td.Guid))); + if(missing.Any()) + throw new ObjectNotFoundException(missing); media.Tags.AddRange(tags .Where(td => !media.Tags.Select(t => t.TagDefinition.Guid).Contains(td.Guid)) @@ -196,20 +200,21 @@ public class ApiMediaController : Controller { using var db = dbFactory.CreateDbContext(); using var transaction = await db.Database.BeginTransactionAsync(); + var missing = new List<Guid>(); + var media = await db.Media .Include(m => m.Tags) .ThenInclude(t => t.TagDefinition) .ThenInclude(td => td.ImplicitTags) .FirstOrDefaultAsync(m => m.Guid == mediaId); if(media is null) - return NotFound(); + missing.Add(mediaId); tagIds = tagIds.Distinct().Order().ToArray(); - var missingTags = tagIds.Except(media.Tags.Select(t => t.TagDefinition.Guid)); - var missingTagsString = string.Join(", ", missingTags.Select(t => t.ToString())); - if(missingTags.Any()) - return BadRequest($"Media does not contain the following tags: {missingTagsString}"); + missing.AddRange(tagIds.Except(media.Tags.Select(t => t.TagDefinition.Guid))); + if(missing.Any()) + throw new ObjectNotFoundException(missing); db.Tags.RemoveRange( media.Tags.Where(t => tagIds.Contains(t.TagDefinition.Guid))); |
