This commit is contained in:
2026-03-21 20:33:15 +01:00
parent 801bf08337
commit 2c3b84a233
39 changed files with 92 additions and 88 deletions
@@ -1,5 +1,5 @@
using Ardalis.Result;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Responses;
namespace Musify.Application.Contracts.Infrastructure
{
@@ -1,9 +1,9 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Commands.CreatePlayList
namespace Musify.Application.PlayLists.Commands
{
public record CreatePlayListCommand(
Guid UserId,
@@ -1,7 +1,7 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
namespace Musify.Application.PlayLists.Commands.DeletePlayList
namespace Musify.Application.PlayLists.Commands
{
public record DeletePlayListCommand(Guid UserId, Guid PlayListId)
: IRequest<DeletePlayListCommand, Task<Result> >;
@@ -1,9 +1,9 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Commands.UpdatePlayList
namespace Musify.Application.PlayLists.Commands
{
public record UpdatePlayListCommand(
Guid UserId,
@@ -5,10 +5,11 @@ using Microsoft.Extensions.Logging;
using Musify.Application.Configuration;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Events;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Commands;
using Musify.Application.PlayLists.Responses;
using Musify.Domain.Entities;
namespace Musify.Application.PlayLists.Commands.CreatePlayList
namespace Musify.Application.PlayLists.Handlers
{
public class CreatePlayListCommandHandler(IEventBus eventBus, IDatabase database, IStorageHandler storageHandler, IPictureHandler pictureHandler,
ILogger<CreatePlayListCommandHandler> logger, ApplicationStorageConfiguration storageConfiguration, PlayListConfiguration playListConfiguration)
@@ -4,8 +4,9 @@ using Microsoft.Extensions.Logging;
using Musify.Application.Configuration;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Events;
using Musify.Application.PlayLists.Commands;
namespace Musify.Application.PlayLists.Commands.DeletePlayList
namespace Musify.Application.PlayLists.Handlers
{
public class DeletePlayListCommandHandler(IDatabase database, IEventBus eventBus,
ApplicationStorageConfiguration storageConfiguration, PlayListConfiguration playListConfiguration, ILogger<DeletePlayListCommandHandler> logger)
@@ -2,9 +2,10 @@
using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
using Musify.Application.PlayLists.Queries;
namespace Musify.Application.PlayLists.Queries.GetPlayListById
namespace Musify.Application.PlayLists.Handlers
{
public class GetPlayListByIdQueryHandler(IDatabase database)
: IRequestHandler<GetPlayListByIdQuery, Task<Result<PlayListResponse>> >
@@ -3,10 +3,11 @@ using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Application;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
using Musify.Application.PlayLists.Queries;
using X.PagedList.EF;
namespace Musify.Application.PlayLists.Queries.GetPlayListsByUserId
namespace Musify.Application.PlayLists.Handlers
{
public class GetPlayListsByUserIdQueryHandler(IDatabase database)
: IRequestHandler<GetPlayListsByUserIdQuery, Task<Result<PaginatedResponse<PlayListResponse> > >>
@@ -3,10 +3,11 @@ using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Application;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
using Musify.Application.PlayLists.Queries;
using X.PagedList.EF;
namespace Musify.Application.PlayLists.Queries.GetPlayLists
namespace Musify.Application.PlayLists.Handlers
{
public class GetPlayListsQueryHandler(IDatabase database)
: IRequestHandler<GetPlayListsQuery, Task<Result<PaginatedResponse<PlayListResponse> >> >
@@ -5,9 +5,10 @@ using Microsoft.Extensions.Logging;
using Musify.Application.Configuration;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Events;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Commands;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Commands.UpdatePlayList
namespace Musify.Application.PlayLists.Handlers
{
public class UpdatePlayListCommandHandler(IEventBus eventBus, IDatabase database, IStorageHandler storageHandler,
ILogger<UpdatePlayListCommandHandler> logger, ApplicationStorageConfiguration storageConfiguration,
@@ -1,8 +1,8 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Queries.GetPlayListById
namespace Musify.Application.PlayLists.Queries
{
public record GetPlayListByIdQuery(Guid Id)
: IRequest<GetPlayListByIdQuery, Task<Result<PlayListResponse>>>;
@@ -1,9 +1,9 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Queries.GetPlayListsByUserId
namespace Musify.Application.PlayLists.Queries
{
public record GetPlayListsByUserIdQuery(
Guid UserId,
@@ -1,9 +1,9 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.PlayLists.Contracts;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Queries.GetPlayLists
namespace Musify.Application.PlayLists.Queries
{
public record GetPlayListsQuery(int PageNumber = 1, int PageSize = 10)
: IRequest<GetPlayListsQuery, Task<Result<PaginatedResponse<PlayListResponse>> >>;
@@ -1,6 +1,6 @@
using Musify.Domain.Entities;
namespace Musify.Application.PlayLists.Contracts
namespace Musify.Application.PlayLists.Responses
{
public record PlayListResponse(
Guid Id,
@@ -1,9 +1,9 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Commands.CreateTrack
namespace Musify.Application.Tracks.Commands
{
public record CreateTrackCommand(
Guid UserId,
@@ -4,10 +4,11 @@ using Microsoft.Extensions.Logging;
using Musify.Application.Configuration;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Events;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Commands;
using Musify.Application.Tracks.Responses;
using Musify.Domain.Entities;
namespace Musify.Application.Tracks.Commands.CreateTrack
namespace Musify.Application.Tracks.Handler
{
public class CreateTrackCommandHandler(IDatabase database, IPictureHandler pictureHandler, IEventBus eventBus, IStorageHandler storageHandler,
ILogger<CreateTrackCommandHandler> logger, ApplicationStorageConfiguration storageConfiguration, TrackConfiguration trackConfiguration)
@@ -1,9 +1,10 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Queries;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries.GetTrackById
namespace Musify.Application.Tracks.Handler
{
public class GetTrackByIdQueryHandler(IDatabase database)
: IRequestHandler<GetTrackByIdQuery, Task<Result<TrackResponse> >>
@@ -3,10 +3,11 @@ using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Application;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Queries;
using Musify.Application.Tracks.Responses;
using X.PagedList.EF;
namespace Musify.Application.Tracks.Queries.GetTracksByUserId
namespace Musify.Application.Tracks.Handler
{
public class GetTracksByUserIdQueryHandler(IDatabase database)
: IRequestHandler<GetTracksByUserIdQuery, Task<Result<PaginatedResponse<TrackResponse>> >>
@@ -3,10 +3,11 @@ using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Application;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Queries;
using Musify.Application.Tracks.Responses;
using X.PagedList.EF;
namespace Musify.Application.Tracks.Queries.GetTracks
namespace Musify.Application.Tracks.Handler
{
public class GetTracksQueryHandler(IDatabase database)
: IRequestHandler<GetTracksQuery, Task<Result<PaginatedResponse<TrackResponse>> > >
@@ -1,8 +1,8 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries.GetTrackById
namespace Musify.Application.Tracks.Queries
{
public record GetTrackByIdQuery(Guid TrackId)
: IRequest<GetTrackByIdQuery, Task<Result<TrackResponse> >>;
@@ -1,9 +1,9 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries.GetTracksByUserId
namespace Musify.Application.Tracks.Queries
{
public record GetTracksByUserIdQuery(
Guid UserId,
@@ -1,9 +1,9 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.Tracks.Contracts;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries.GetTracks
namespace Musify.Application.Tracks.Queries
{
public record GetTracksQuery(int PageNumber = 1, int PageSize = 10)
: IRequest<GetTracksQuery, Task<Result<PaginatedResponse<TrackResponse> >> >;
@@ -1,6 +1,6 @@
using Musify.Domain.Entities;
namespace Musify.Application.Tracks.Contracts
namespace Musify.Application.Tracks.Responses
{
public record TrackResponse(
Guid Id,
@@ -1,8 +1,8 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Commands.CreateUser
namespace Musify.Application.Users.Commands
{
public record CreateUserCommand(Guid Id)
: IRequest<CreateUserCommand, Task<Result<UserResponse>>>;
@@ -1,7 +1,7 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
namespace Musify.Application.Users.Commands.DeleteUser
namespace Musify.Application.Users.Commands
{
public record DeleteUserCommand(Guid Id)
: IRequest<DeleteUserCommand, Task<Result>>;
@@ -1,12 +0,0 @@
namespace Musify.Application.Users.Contracts
{
public record PaginatedUserResponse(
IReadOnlyCollection<UserResponse> Users,
int PageNumber,
int PageSize,
int PageCount,
int TotalItemCount,
bool HasNextPage,
bool HasPreviousPage
);
}
@@ -3,10 +3,11 @@ using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Commands;
using Musify.Application.Users.Responses;
using Musify.Domain.Entities;
namespace Musify.Application.Users.Commands.CreateUser
namespace Musify.Application.Users.Handlers
{
public class CreateUserCommandHandler(IDatabase database, IKeycloakUserService keycloakUserClient, ILogger<CreateUserCommandHandler> logger)
: IRequestHandler<CreateUserCommand, Task<Result<UserResponse> >>
@@ -2,7 +2,7 @@
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Infrastructure;
namespace Musify.Application.Users.Commands.DeleteUser
namespace Musify.Application.Users.Commands
{
public class DeleteUserCommandHandler(IDatabase database)
: IRequestHandler<DeleteUserCommand, Task<Result>>
@@ -2,12 +2,13 @@
using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Queries;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Queries.GetUserById
namespace Musify.Application.Users.Handlers
{
public class GetUserByIdQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient)
: IRequestHandler<GetUserByIdQuery, Task<Result<UserResponse>>>
: IRequestHandler<GetUserByIdQuery, Task<Result<UserResponse> >>
{
public async Task<Result<UserResponse>> Handle(GetUserByIdQuery request, CancellationToken cancellationToken)
{
@@ -2,12 +2,13 @@ using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Queries;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Queries.GetUserByKeycloakId
namespace Musify.Application.Users.Handlers
{
public class GetUserByKeycloakQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient)
: IRequestHandler<GetUserByKeycloakQuery, Task<Result<UserResponse>>>
: IRequestHandler<GetUserByKeycloakQuery, Task<Result<UserResponse> >>
{
public async Task<Result<UserResponse>> Handle(GetUserByKeycloakQuery request, CancellationToken cancellationToken)
{
@@ -1,17 +1,19 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts.Application;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Queries;
using Musify.Application.Users.Responses;
using X.PagedList;
using X.PagedList.Extensions;
namespace Musify.Application.Users.Queries.GetUsers
namespace Musify.Application.Users.Handlers
{
public class GetUsersQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient)
: IRequestHandler<GetUsersQuery, Task<Result<PaginatedUserResponse> >>
: IRequestHandler<GetUsersQuery, Task<Result<PaginatedResponse<UserResponse> > >>
{
public async Task<Result<PaginatedUserResponse>> Handle(GetUsersQuery request, CancellationToken cancellationToken)
public async Task<Result<PaginatedResponse<UserResponse> >> Handle(GetUsersQuery request, CancellationToken cancellationToken)
{
var pageNumber = request.PageNumber < 1 ? 1 : request.PageNumber;
var pageSize = request.PageSize < 1 ? 10 : request.PageSize;
@@ -44,7 +46,7 @@ namespace Musify.Application.Users.Queries.GetUsers
var pagedUsers = new StaticPagedList<UserResponse>(users, pageNumber, pageSize, totalItemCount);
var response = new PaginatedUserResponse(
var response = new PaginatedResponse<UserResponse>(
pagedUsers.ToArray(),
pagedUsers.PageNumber,
pagedUsers.PageSize,
@@ -56,4 +58,4 @@ namespace Musify.Application.Users.Queries.GetUsers
return Result.Success(response);
}
}
}
}
@@ -1,8 +1,8 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Queries.GetUserById
namespace Musify.Application.Users.Queries
{
public record GetUserByIdQuery(Guid Id)
: IRequest<GetUserByIdQuery, Task<Result<UserResponse> >>;
@@ -1,8 +1,8 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Queries.GetUserByKeycloakId
namespace Musify.Application.Users.Queries
{
public record GetUserByKeycloakQuery(Guid Id)
: IRequest<GetUserByKeycloakQuery, Task<Result<UserResponse> >>;
@@ -1,9 +0,0 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Users.Contracts;
namespace Musify.Application.Users.Queries.GetUsers
{
public record GetUsersQuery(int PageNumber, int PageSize, string UsernameSearch)
: IRequest<GetUsersQuery, Task<Result<PaginatedUserResponse>> >;
}
@@ -0,0 +1,10 @@
using Ardalis.Result;
using DispatchR.Abstractions.Send;
using Musify.Application.Contracts.Application;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Queries
{
public record GetUsersQuery(int PageNumber, int PageSize, string UsernameSearch)
: IRequest<GetUsersQuery, Task<Result<PaginatedResponse<UserResponse> >> >;
}
@@ -1,4 +1,4 @@
namespace Musify.Application.Users.Contracts
namespace Musify.Application.Users.Responses
{
public record KeycloakUserResponse(
Guid Id,
@@ -1,4 +1,4 @@
namespace Musify.Application.Users.Contracts
namespace Musify.Application.Users.Responses
{
public record UserResponse(
string Id,
@@ -1,5 +1,5 @@
using Keycloak.Net.Models.Users;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Responses;
namespace Musify.Infrastructure.Identity
{
@@ -3,7 +3,7 @@ using Keycloak.Net;
using Keycloak.Net.Models.Users;
using Microsoft.Extensions.Logging;
using Musify.Application.Contracts.Infrastructure;
using Musify.Application.Users.Contracts;
using Musify.Application.Users.Responses;
using Musify.Infrastructure.Configuration;
namespace Musify.Infrastructure.Identity