This commit is contained in:
2026-05-29 22:36:33 +02:00
parent 9e68e12903
commit 8b46547b20
2 changed files with 23 additions and 19 deletions
+2 -3
View File
@@ -12,7 +12,7 @@ public sealed class CurrentUser : IBindableFromHttpContext<CurrentUser>
IsAuthenticated = isAuthenticated.HasValue && isAuthenticated.Value; IsAuthenticated = isAuthenticated.HasValue && isAuthenticated.Value;
var rawId = principal.FindFirstValue(ClaimTypes.NameIdentifier); var rawId = principal.FindFirstValue(ClaimTypes.NameIdentifier);
Id = Guid.TryParse(rawId, out var id)? id : Guid.Empty; Id = Guid.TryParse(rawId, out var id)? id : null;
Username = principal.FindFirstValue(ClaimTypes.Name); Username = principal.FindFirstValue(ClaimTypes.Name);
FirstName = principal.FindFirstValue(ClaimTypes.GivenName); FirstName = principal.FindFirstValue(ClaimTypes.GivenName);
@@ -31,8 +31,7 @@ public sealed class CurrentUser : IBindableFromHttpContext<CurrentUser>
public string? LastName { get; } public string? LastName { get; }
public Guid RequiredId => Id public Guid RequiredId => Id.HasValue? Id.Value : throw new InvalidOperationException("User ID is required but not present.");
?? throw new InvalidOperationException("The current request does not contain an authenticated user id.");
public bool HasClaim(string type) => Principal.HasClaim(c => c.Type == type); public bool HasClaim(string type) => Principal.HasClaim(c => c.Type == type);
+21 -16
View File
@@ -1,6 +1,7 @@
using Mediator; using Mediator;
using Musify.Application.PlayLists.Commands; using Musify.Application.PlayLists.Commands;
using Musify.Application.PlayLists.Queries; using Musify.Application.PlayLists.Queries;
using WebApi.Authentication;
using WebApi.DataTransferObjects.PlayLists; using WebApi.DataTransferObjects.PlayLists;
using WebApi.Extensions; using WebApi.Extensions;
using WebApi.Filters; using WebApi.Filters;
@@ -26,24 +27,28 @@ public static class PlayListEndpoints
.WithName("GetPlayListsByUserId") .WithName("GetPlayListsByUserId")
.WithSummary("Get Paginated PlayLists For A User."); .WithSummary("Get Paginated PlayLists For A User.");
group.MapPost("/users/{userId}", CreatePlayList) group.MapPost("/", CreatePlayList)
.WithName("CreatePlayList") .WithName("CreatePlayList")
.WithSummary("Create A New PlayList.") .WithSummary("Create A New PlayList.")
.AddEndpointFilter<ValidationFilter<CreatePlayListRequest>>(); .AddEndpointFilter<ValidationFilter<CreatePlayListRequest>>()
.RequireAuthorization();
group.MapPut("/{playlistId}/users/{userId}", UpdatePlayList) group.MapPut("/{playlistId}", UpdatePlayList)
.WithName("UpdatePlayList") .WithName("UpdatePlayList")
.WithSummary("Update An Existing PlayList.") .WithSummary("Update An Existing PlayList.")
.AddEndpointFilter<ValidationFilter<UpdatePlayListRequest>>(); .AddEndpointFilter<ValidationFilter<UpdatePlayListRequest>>()
.RequireAuthorization();
group.MapDelete("/{playlistId}/users/{userId}", DeletePlayList) group.MapDelete("/{playlistId}", DeletePlayList)
.WithName("DeletePlayList") .WithName("DeletePlayList")
.WithSummary("Delete A PlayList."); .WithSummary("Delete A PlayList.")
.RequireAuthorization();
group.MapPost("/upload-picture/users/{userId}", RequestPlayListPictureUpload) group.MapPost("/upload-picture", RequestPlayListPictureUpload)
.WithName("RequestPlayListPictureUpload") .WithName("RequestPlayListPictureUpload")
.WithSummary("Request A Pre-Signed URL To Upload A PlayList Picture.") .WithSummary("Request A Pre-Signed URL To Upload A PlayList Picture.")
.AddEndpointFilter<ValidationFilter<RequestPlayListPictureUploadRequest>>(); .AddEndpointFilter<ValidationFilter<RequestPlayListPictureUploadRequest>>()
.RequireAuthorization();
return app; return app;
} }
@@ -81,12 +86,12 @@ public static class PlayListEndpoints
private static async Task<IResult> CreatePlayList( private static async Task<IResult> CreatePlayList(
IMediator mediator, IMediator mediator,
Guid userId, CurrentUser currentUser,
CreatePlayListRequest request, CreatePlayListRequest request,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var result = await mediator.Send( var result = await mediator.Send(
new CreatePlayListCommand(userId, request.Name, request.Description, request.PictureIntentId), new CreatePlayListCommand(currentUser.RequiredId, request.Name, request.Description, request.PictureIntentId),
cancellationToken); cancellationToken);
if (!result.IsSuccess) if (!result.IsSuccess)
@@ -97,13 +102,13 @@ public static class PlayListEndpoints
private static async Task<IResult> UpdatePlayList( private static async Task<IResult> UpdatePlayList(
IMediator mediator, IMediator mediator,
Guid userId, CurrentUser currentUser,
Guid playlistId, Guid playlistId,
UpdatePlayListRequest request, UpdatePlayListRequest request,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var result = await mediator.Send( var result = await mediator.Send(
new UpdatePlayListCommand(userId, playlistId, request.NewName, request.NewDescription, request.NewPictureIntentId), new UpdatePlayListCommand(currentUser.RequiredId, playlistId, request.NewName, request.NewDescription, request.NewPictureIntentId),
cancellationToken); cancellationToken);
return result.ToHttpResult(); return result.ToHttpResult();
@@ -111,22 +116,22 @@ public static class PlayListEndpoints
private static async Task<IResult> DeletePlayList( private static async Task<IResult> DeletePlayList(
IMediator mediator, IMediator mediator,
Guid userId, CurrentUser currentUser,
Guid playlistId, Guid playlistId,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var result = await mediator.Send(new DeletePlayListCommand(userId, playlistId), cancellationToken); var result = await mediator.Send(new DeletePlayListCommand(currentUser.RequiredId, playlistId), cancellationToken);
return result.ToHttpResult(); return result.ToHttpResult();
} }
private static async Task<IResult> RequestPlayListPictureUpload( private static async Task<IResult> RequestPlayListPictureUpload(
IMediator mediator, IMediator mediator,
Guid userId, CurrentUser currentUser,
RequestPlayListPictureUploadRequest request, RequestPlayListPictureUploadRequest request,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
var result = await mediator.Send( var result = await mediator.Send(
new RequestPlayListPictureUploadCommand(userId, request.FileType, request.ContentType, request.ExpectedSizeBytes), new RequestPlayListPictureUploadCommand(currentUser.RequiredId, request.FileType, request.ContentType, request.ExpectedSizeBytes),
cancellationToken); cancellationToken);
return result.ToHttpResult(); return result.ToHttpResult();