Unify API route parameters, return IResult everywhere, merge picture upload DTOs and centralize validation limits

Guid and long route constraints, id/trackId parameter names, Update*Request without the New prefix,
sentence-case operation summaries, shared security scheme id and a single Limits class.
This commit is contained in:
2026-09-24 12:36:48 +02:00
parent 405df082cc
commit fcf3093ad8
38 changed files with 740 additions and 829 deletions
@@ -1,4 +1,5 @@
using Musify.Api.DataTransferObjects.Albums;
using Musify.Api.Validators;
using Musify.Api.Validators.Albums;
using Xunit;
@@ -44,7 +45,7 @@ public sealed class CreateAlbumRequestValidatorTests
[Fact]
public void Validate_ReleaseYearBeforeTheEarliestBoundary_Fails()
{
var result = validator.Validate(new CreateAlbumRequest("Title", null, AlbumReleaseYear.Earliest - 1, Guid.NewGuid()));
var result = validator.Validate(new CreateAlbumRequest("Title", null, Limits.EarliestReleaseYear - 1, Guid.NewGuid()));
Assert.False(result.IsValid);
}
@@ -52,7 +53,7 @@ public sealed class CreateAlbumRequestValidatorTests
[Fact]
public void Validate_ReleaseYearAtTheEarliestBoundary_Passes()
{
var result = validator.Validate(new CreateAlbumRequest("Title", null, AlbumReleaseYear.Earliest, Guid.NewGuid()));
var result = validator.Validate(new CreateAlbumRequest("Title", null, Limits.EarliestReleaseYear, Guid.NewGuid()));
Assert.True(result.IsValid);
}
@@ -60,7 +61,7 @@ public sealed class CreateAlbumRequestValidatorTests
[Fact]
public void Validate_ReleaseYearAtTheLatestBoundary_Passes()
{
var result = validator.Validate(new CreateAlbumRequest("Title", null, AlbumReleaseYear.Latest, Guid.NewGuid()));
var result = validator.Validate(new CreateAlbumRequest("Title", null, Limits.LatestReleaseYear, Guid.NewGuid()));
Assert.True(result.IsValid);
}
@@ -68,7 +69,7 @@ public sealed class CreateAlbumRequestValidatorTests
[Fact]
public void Validate_ReleaseYearPastTheLatestBoundary_Fails()
{
var result = validator.Validate(new CreateAlbumRequest("Title", null, AlbumReleaseYear.Latest + 1, Guid.NewGuid()));
var result = validator.Validate(new CreateAlbumRequest("Title", null, Limits.LatestReleaseYear + 1, Guid.NewGuid()));
Assert.False(result.IsValid);
}
@@ -1,6 +1,6 @@
using Musify.Api.DataTransferObjects.Albums;
using Musify.Api.DataTransferObjects;
using Musify.Api.DataTransferObjects.Tracks;
using Musify.Api.Validators.Albums;
using Musify.Api.Validators;
using Musify.Api.Validators.Tracks;
using Musify.Application.Configuration;
using Xunit;
@@ -14,9 +14,9 @@ public sealed class UploadRequestValidatorTests
[Fact]
public void PictureUpload_ValidRequest_Passes()
{
var validator = new RequestAlbumPictureUploadRequestValidator(configuration);
var validator = new PictureUploadRequestValidator(configuration);
var result = validator.Validate(new RequestAlbumPictureUploadRequest("webp", "image/webp", 500));
var result = validator.Validate(new PictureUploadRequest("webp", "image/webp", 500));
Assert.True(result.IsValid);
}
@@ -30,9 +30,9 @@ public sealed class UploadRequestValidatorTests
[InlineData("webp", "image/webp", 1_001L)]
public void PictureUpload_InvalidRequest_Fails(string fileType, string contentType, long size)
{
var validator = new RequestAlbumPictureUploadRequestValidator(configuration);
var validator = new PictureUploadRequestValidator(configuration);
var result = validator.Validate(new RequestAlbumPictureUploadRequest(fileType, contentType, size));
var result = validator.Validate(new PictureUploadRequest(fileType, contentType, size));
Assert.False(result.IsValid);
}