refactor(application): co-locate each command/query with its handler

One file per use case under the feature folder (Tracks/PlayLists/Users),
dropping the Commands/Queries/Handlers sub-folders and their namespaces.
Each file now holds the record and its handler in namespace
Musify.Application.<Feature>; external usings updated accordingly.

Build: 0 warnings, 0 errors.
This commit is contained in:
2026-07-05 04:12:59 +02:00
parent bf3b5ceedb
commit db38740139
46 changed files with 158 additions and 309 deletions
@@ -1,6 +1,6 @@
using Mediator; using Mediator;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Musify.Application.Users.Commands; using Musify.Application.Users;
using System.Security.Claims; using System.Security.Claims;
namespace Musify.Api.Authentication; namespace Musify.Api.Authentication;
@@ -1,6 +1,5 @@
using Mediator; using Mediator;
using Musify.Application.PlayLists.Commands; using Musify.Application.PlayLists;
using Musify.Application.PlayLists.Queries;
using Musify.Api.Authentication; using Musify.Api.Authentication;
using Musify.Api.DataTransferObjects.PlayLists; using Musify.Api.DataTransferObjects.PlayLists;
using Musify.Api.Extensions; using Musify.Api.Extensions;
@@ -1,6 +1,5 @@
using Mediator; using Mediator;
using Musify.Application.Tracks.Commands; using Musify.Application.Tracks;
using Musify.Application.Tracks.Queries;
using Musify.Api.Authentication; using Musify.Api.Authentication;
using Musify.Api.DataTransferObjects.Tracks; using Musify.Api.DataTransferObjects.Tracks;
using Musify.Api.Extensions; using Musify.Api.Extensions;
@@ -1,6 +1,5 @@
using Mediator; using Mediator;
using Musify.Application.Users.Commands; using Musify.Application.Users;
using Musify.Application.Users.Queries;
using Musify.Api.DataTransferObjects.Users; using Musify.Api.DataTransferObjects.Users;
using Musify.Api.Extensions; using Musify.Api.Extensions;
using Musify.Api.Filters; using Musify.Api.Filters;
@@ -3,11 +3,13 @@ using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.PlayLists.Commands;
using Musify.Domain.Entities; using Musify.Domain.Entities;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record AddTrackToPlayListCommand(long UserId, Guid PlayListId, Guid TrackId)
: ICommand<ErrorOr<Success>>;
public class AddTrackToPlayListCommandHandler( public class AddTrackToPlayListCommandHandler(
IDatabase database, IDatabase database,
ILogger<AddTrackToPlayListCommandHandler> logger) ILogger<AddTrackToPlayListCommandHandler> logger)
@@ -1,8 +0,0 @@
using ErrorOr;
using Mediator;
namespace Musify.Application.PlayLists.Commands
{
public record AddTrackToPlayListCommand(long UserId, Guid PlayListId, Guid TrackId)
: ICommand<ErrorOr<Success>>;
}
@@ -1,13 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Commands
{
public record CreatePlayListCommand(
long UserId,
string Name,
string Description,
Guid? PictureIntentId)
: ICommand<ErrorOr<PlayListApplicationResponse>>;
}
@@ -1,8 +0,0 @@
using ErrorOr;
using Mediator;
namespace Musify.Application.PlayLists.Commands
{
public record DeletePlayListCommand(long UserId, Guid PlayListId)
: ICommand<ErrorOr<Success>>;
}
@@ -1,8 +0,0 @@
using ErrorOr;
using Mediator;
namespace Musify.Application.PlayLists.Commands
{
public record RemoveTrackFromPlayListCommand(long UserId, Guid PlayListId, Guid TrackId)
: ICommand<ErrorOr<Success>>;
}
@@ -1,13 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Commands
{
public record RequestPlayListPictureUploadCommand(
long UserId,
string FileType,
string ContentType,
long? ExpectedSizeBytes = null)
: ICommand<ErrorOr<PlayListPictureUploadResponse>>;
}
@@ -1,14 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Commands
{
public record UpdatePlayListCommand(
long UserId,
Guid PlayListId,
string? NewName,
string? NewDescription,
Guid? NewPictureIntentId)
: ICommand<ErrorOr<PlayListApplicationResponse>>;
}
@@ -5,14 +5,20 @@ using Microsoft.Extensions.Logging;
using Musify.Application.Configuration; using Musify.Application.Configuration;
using Musify.Application.Shared; using Musify.Application.Shared;
using Musify.Application.Events; using Musify.Application.Events;
using Musify.Application.PlayLists.Commands;
using Musify.Application.PlayLists.Responses; using Musify.Application.PlayLists.Responses;
using Musify.Application.Services; using Musify.Application.Services;
using Musify.Domain.Entities; using Musify.Domain.Entities;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record CreatePlayListCommand(
long UserId,
string Name,
string Description,
Guid? PictureIntentId)
: ICommand<ErrorOr<PlayListApplicationResponse>>;
public class CreatePlayListCommandHandler( public class CreatePlayListCommandHandler(
IEventBus eventBus, IEventBus eventBus,
IDatabase database, IDatabase database,
@@ -4,11 +4,13 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.Events; using Musify.Application.Events;
using Musify.Application.PlayLists.Commands;
using Musify.Domain.ValueObjects; using Musify.Domain.ValueObjects;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record DeletePlayListCommand(long UserId, Guid PlayListId)
: ICommand<ErrorOr<Success>>;
public class DeletePlayListCommandHandler( public class DeletePlayListCommandHandler(
IDatabase database, IDatabase database,
IEventBus eventBus, IEventBus eventBus,
@@ -1,12 +1,14 @@
using ErrorOr; using ErrorOr;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.PlayLists.Responses; using Musify.Application.PlayLists.Responses;
using Musify.Application.PlayLists.Queries;
using Mediator; using Mediator;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record GetPlayListByIdQuery(Guid Id)
: IQuery<ErrorOr<PlayListApplicationResponse>>;
public class GetPlayListByIdQueryHandler(IDatabase database) public class GetPlayListByIdQueryHandler(IDatabase database)
: IQueryHandler<GetPlayListByIdQuery, ErrorOr<PlayListApplicationResponse>> : IQueryHandler<GetPlayListByIdQuery, ErrorOr<PlayListApplicationResponse>>
{ {
@@ -3,12 +3,17 @@ using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.Pagination; using Musify.Application.Pagination;
using Musify.Application.PlayLists.Queries;
using Musify.Application.Tracks.Responses; using Musify.Application.Tracks.Responses;
using X.PagedList.EF; using X.PagedList.EF;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record GetPlayListTracksQuery(
Guid PlayListId,
int PageNumber = 1,
int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<TrackApplicationResponse>>>;
public class GetPlayListTracksQueryHandler(IDatabase database) public class GetPlayListTracksQueryHandler(IDatabase database)
: IQueryHandler<GetPlayListTracksQuery, ErrorOr<PaginatedResponse<TrackApplicationResponse>> > : IQueryHandler<GetPlayListTracksQuery, ErrorOr<PaginatedResponse<TrackApplicationResponse>> >
{ {
@@ -2,13 +2,15 @@ using ErrorOr;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Pagination; using Musify.Application.Pagination;
using Musify.Application.PlayLists.Responses; using Musify.Application.PlayLists.Responses;
using Musify.Application.PlayLists.Queries;
using X.PagedList.EF; using X.PagedList.EF;
using Mediator; using Mediator;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record GetPlayListsQuery(int PageNumber = 1, int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<PlayListApplicationResponse>> >;
public class GetPlayListsQueryHandler(IDatabase database) public class GetPlayListsQueryHandler(IDatabase database)
: IQueryHandler<GetPlayListsQuery, ErrorOr<PaginatedResponse<PlayListApplicationResponse> >> : IQueryHandler<GetPlayListsQuery, ErrorOr<PaginatedResponse<PlayListApplicationResponse> >>
{ {
@@ -2,13 +2,19 @@ using ErrorOr;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Pagination; using Musify.Application.Pagination;
using Musify.Application.PlayLists.Responses; using Musify.Application.PlayLists.Responses;
using Musify.Application.PlayLists.Queries;
using X.PagedList.EF; using X.PagedList.EF;
using Mediator; using Mediator;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record GetPlayListsByUserIdQuery(
long UserId,
string? Name,
int PageNumber = 1,
int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<PlayListApplicationResponse>> >;
public class GetPlayListsByUserIdQueryHandler(IDatabase database) public class GetPlayListsByUserIdQueryHandler(IDatabase database)
: IQueryHandler<GetPlayListsByUserIdQuery, ErrorOr<PaginatedResponse<PlayListApplicationResponse> > > : IQueryHandler<GetPlayListsByUserIdQuery, ErrorOr<PaginatedResponse<PlayListApplicationResponse> > >
{ {
@@ -1,9 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Queries
{
public record GetPlayListByIdQuery(Guid Id)
: IQuery<ErrorOr<PlayListApplicationResponse>>;
}
@@ -1,13 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Pagination;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.PlayLists.Queries
{
public record GetPlayListTracksQuery(
Guid PlayListId,
int PageNumber = 1,
int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<TrackApplicationResponse>>>;
}
@@ -1,14 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Pagination;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Queries
{
public record GetPlayListsByUserIdQuery(
long UserId,
string? Name,
int PageNumber = 1,
int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<PlayListApplicationResponse>> >;
}
@@ -1,10 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Pagination;
using Musify.Application.PlayLists.Responses;
namespace Musify.Application.PlayLists.Queries
{
public record GetPlayListsQuery(int PageNumber = 1, int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<PlayListApplicationResponse>> >;
}
@@ -3,10 +3,12 @@ using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.PlayLists.Commands;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record RemoveTrackFromPlayListCommand(long UserId, Guid PlayListId, Guid TrackId)
: ICommand<ErrorOr<Success>>;
public class RemoveTrackFromPlayListCommandHandler( public class RemoveTrackFromPlayListCommandHandler(
IDatabase database, IDatabase database,
ILogger<RemoveTrackFromPlayListCommandHandler> logger) ILogger<RemoveTrackFromPlayListCommandHandler> logger)
@@ -3,15 +3,21 @@ using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Configuration; using Musify.Application.Configuration;
using Musify.Application.PlayLists.Commands;
using Musify.Application.PlayLists.Responses; using Musify.Application.PlayLists.Responses;
using Musify.Application.Services; using Musify.Application.Services;
using Musify.Domain.Entities; using Musify.Domain.Entities;
using Musify.Domain.ValueObjects; using Musify.Domain.ValueObjects;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record RequestPlayListPictureUploadCommand(
long UserId,
string FileType,
string ContentType,
long? ExpectedSizeBytes = null)
: ICommand<ErrorOr<PlayListPictureUploadResponse>>;
public class RequestPlayListPictureUploadCommandHandler( public class RequestPlayListPictureUploadCommandHandler(
IDatabase database, IDatabase database,
UploadIntentValidator uploadIntentValidator, UploadIntentValidator uploadIntentValidator,
@@ -5,14 +5,21 @@ using Microsoft.Extensions.Logging;
using Musify.Application.Configuration; using Musify.Application.Configuration;
using Musify.Application.Shared; using Musify.Application.Shared;
using Musify.Application.Events; using Musify.Application.Events;
using Musify.Application.PlayLists.Commands;
using Musify.Application.PlayLists.Responses; using Musify.Application.PlayLists.Responses;
using Musify.Application.Services; using Musify.Application.Services;
using Musify.Domain.Entities; using Musify.Domain.Entities;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.PlayLists.Handlers namespace Musify.Application.PlayLists
{ {
public record UpdatePlayListCommand(
long UserId,
Guid PlayListId,
string? NewName,
string? NewDescription,
Guid? NewPictureIntentId)
: ICommand<ErrorOr<PlayListApplicationResponse>>;
public class UpdatePlayListCommandHandler( public class UpdatePlayListCommandHandler(
IEventBus eventBus, IEventBus eventBus,
IDatabase database, IDatabase database,
@@ -1,13 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Commands
{
public record CreateTrackCommand(
long UserId,
string Title,
Guid PictureIntentId,
Guid AudioIntentId)
: ICommand<ErrorOr<TrackApplicationResponse>>;
}
@@ -1,10 +0,0 @@
using ErrorOr;
using Mediator;
namespace Musify.Application.Tracks.Commands
{
public record DeleteTrackCommand(
long UserId,
Guid TrackId)
: ICommand<ErrorOr<Success>>;
}
@@ -1,16 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Commands
{
public record RequestTrackUploadUrlsCommand(
long UserId,
string PictureFileType,
string PictureContentType,
string AudioFileType,
string AudioContentType,
long? ExpectedPictureSizeBytes = null,
long? ExpectedAudioSizeBytes = null)
: ICommand<ErrorOr<TrackUploadUrlsResponse>>;
}
@@ -5,15 +5,21 @@ using Microsoft.Extensions.Logging;
using Musify.Application.Configuration; using Musify.Application.Configuration;
using Musify.Application.Shared; using Musify.Application.Shared;
using Musify.Application.Events; using Musify.Application.Events;
using Musify.Application.Tracks.Commands;
using Musify.Application.Tracks.Responses; using Musify.Application.Tracks.Responses;
using Musify.Application.Services; using Musify.Application.Services;
using Musify.Domain.Entities; using Musify.Domain.Entities;
using Musify.Domain.ValueObjects; using Musify.Domain.ValueObjects;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.Tracks.Handlers namespace Musify.Application.Tracks
{ {
public record CreateTrackCommand(
long UserId,
string Title,
Guid PictureIntentId,
Guid AudioIntentId)
: ICommand<ErrorOr<TrackApplicationResponse>>;
public class CreateTrackCommandHandler( public class CreateTrackCommandHandler(
IDatabase database, IDatabase database,
IEventBus eventBus, IEventBus eventBus,
@@ -2,13 +2,17 @@ using ErrorOr;
using Mediator; using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Tracks.Commands;
using Musify.Domain.ValueObjects; using Musify.Domain.ValueObjects;
using Musify.Application.Events; using Musify.Application.Events;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.Tracks.Handlers namespace Musify.Application.Tracks
{ {
public record DeleteTrackCommand(
long UserId,
Guid TrackId)
: ICommand<ErrorOr<Success>>;
public class DeleteTrackCommandHandler( public class DeleteTrackCommandHandler(
IDatabase database, IDatabase database,
IEventBus eventBus, IEventBus eventBus,
@@ -2,11 +2,13 @@ using ErrorOr;
using Mediator; using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.Tracks.Queries;
using Musify.Application.Tracks.Responses; using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Handlers namespace Musify.Application.Tracks
{ {
public record GetTrackByIdQuery(Guid TrackId)
: IQuery<ErrorOr<TrackApplicationResponse>>;
public class GetTrackByIdQueryHandler(IDatabase database) public class GetTrackByIdQueryHandler(IDatabase database)
: IQueryHandler<GetTrackByIdQuery, ErrorOr<TrackApplicationResponse> > : IQueryHandler<GetTrackByIdQuery, ErrorOr<TrackApplicationResponse> >
{ {
@@ -4,12 +4,14 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Configuration; using Musify.Application.Configuration;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.Tracks.Queries;
using Musify.Application.Tracks.Responses; using Musify.Application.Tracks.Responses;
using Musify.Domain.ValueObjects; using Musify.Domain.ValueObjects;
namespace Musify.Application.Tracks.Handlers namespace Musify.Application.Tracks
{ {
public record GetTrackStreamQuery(Guid TrackId, long UserId)
: IQuery<ErrorOr<TrackStreamResponse>>;
public class GetTrackStreamQueryHandler( public class GetTrackStreamQueryHandler(
IDatabase database, IDatabase database,
IStreamTicketService ticketService, IStreamTicketService ticketService,
@@ -2,13 +2,15 @@ using ErrorOr;
using Mediator; using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Pagination; using Musify.Application.Pagination;
using Musify.Application.Tracks.Queries;
using Musify.Application.Tracks.Responses; using Musify.Application.Tracks.Responses;
using X.PagedList.EF; using X.PagedList.EF;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.Tracks.Handlers namespace Musify.Application.Tracks
{ {
public record GetTracksQuery(int PageNumber = 1, int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<TrackApplicationResponse> >>;
public class GetTracksQueryHandler(IDatabase database) public class GetTracksQueryHandler(IDatabase database)
: IQueryHandler<GetTracksQuery, ErrorOr<PaginatedResponse<TrackApplicationResponse>> > : IQueryHandler<GetTracksQuery, ErrorOr<PaginatedResponse<TrackApplicationResponse>> >
{ {
@@ -2,13 +2,19 @@ using ErrorOr;
using Mediator; using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Pagination; using Musify.Application.Pagination;
using Musify.Application.Tracks.Queries;
using Musify.Application.Tracks.Responses; using Musify.Application.Tracks.Responses;
using X.PagedList.EF; using X.PagedList.EF;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.Tracks.Handlers namespace Musify.Application.Tracks
{ {
public record GetTracksByUserIdQuery(
long UserId,
string? Name = null,
int PageNumber = 1,
int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<TrackApplicationResponse> > >;
public class GetTracksByUserIdQueryHandler(IDatabase database) public class GetTracksByUserIdQueryHandler(IDatabase database)
: IQueryHandler<GetTracksByUserIdQuery, ErrorOr<PaginatedResponse<TrackApplicationResponse>> > : IQueryHandler<GetTracksByUserIdQuery, ErrorOr<PaginatedResponse<TrackApplicationResponse>> >
{ {
@@ -1,9 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries
{
public record GetTrackByIdQuery(Guid TrackId)
: IQuery<ErrorOr<TrackApplicationResponse>>;
}
@@ -1,9 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries
{
public record GetTrackStreamQuery(Guid TrackId, long UserId)
: IQuery<ErrorOr<TrackStreamResponse>>;
}
@@ -1,14 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Pagination;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries
{
public record GetTracksByUserIdQuery(
long UserId,
string? Name = null,
int PageNumber = 1,
int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<TrackApplicationResponse> > >;
}
@@ -1,10 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Pagination;
using Musify.Application.Tracks.Responses;
namespace Musify.Application.Tracks.Queries
{
public record GetTracksQuery(int PageNumber = 1, int PageSize = 10)
: IQuery<ErrorOr<PaginatedResponse<TrackApplicationResponse> >>;
}
@@ -4,14 +4,23 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Configuration; using Musify.Application.Configuration;
using Musify.Application.Services; using Musify.Application.Services;
using Musify.Application.Tracks.Commands;
using Musify.Application.Tracks.Responses; using Musify.Application.Tracks.Responses;
using Musify.Domain.Entities; using Musify.Domain.Entities;
using Musify.Domain.ValueObjects; using Musify.Domain.ValueObjects;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.Tracks.Handlers namespace Musify.Application.Tracks
{ {
public record RequestTrackUploadUrlsCommand(
long UserId,
string PictureFileType,
string PictureContentType,
string AudioFileType,
string AudioContentType,
long? ExpectedPictureSizeBytes = null,
long? ExpectedAudioSizeBytes = null)
: ICommand<ErrorOr<TrackUploadUrlsResponse>>;
public class RequestTrackUploadUrlsCommandHandler( public class RequestTrackUploadUrlsCommandHandler(
IDatabase database, IDatabase database,
UploadIntentValidator uploadIntentValidator, UploadIntentValidator uploadIntentValidator,
@@ -1,26 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Users.Responses;
using Musify.Domain.Entities;
namespace Musify.Application.Users.Commands
{
public record CreateUserCommand(long Id,
string Name,
string? FirstName,
string? SecondName)
: ICommand<ErrorOr<UserApplicationResponse>>
{
public static User ToEntity(CreateUserCommand command)
{
return new User
{
Id = command.Id,
Name = command.Name,
NormalizedName = command.Name.ToUpperInvariant(),
FirstName = command.FirstName,
SecondName = command.SecondName
};
}
}
}
@@ -1,13 +0,0 @@
using ErrorOr;
using Mediator;
namespace Musify.Application.Users.Commands
{
public record SyncUserCommand(
long Id,
string Name,
string? FirstName,
string? SecondName,
string? ProfilePictureUrl)
: ICommand<ErrorOr<Success>>;
}
@@ -3,11 +3,30 @@ using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.Users.Commands;
using Musify.Application.Users.Responses; using Musify.Application.Users.Responses;
using Musify.Domain.Entities;
namespace Musify.Application.Users.Handlers namespace Musify.Application.Users
{ {
public record CreateUserCommand(long Id,
string Name,
string? FirstName,
string? SecondName)
: ICommand<ErrorOr<UserApplicationResponse>>
{
public static User ToEntity(CreateUserCommand command)
{
return new User
{
Id = command.Id,
Name = command.Name,
NormalizedName = command.Name.ToUpperInvariant(),
FirstName = command.FirstName,
SecondName = command.SecondName
};
}
}
public class CreateUserCommandHandler(IDatabase database, ILogger<CreateUserCommandHandler> logger) public class CreateUserCommandHandler(IDatabase database, ILogger<CreateUserCommandHandler> logger)
: ICommandHandler<CreateUserCommand, ErrorOr<UserApplicationResponse> > : ICommandHandler<CreateUserCommand, ErrorOr<UserApplicationResponse> >
{ {
@@ -2,11 +2,13 @@ using ErrorOr;
using Mediator; using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.Users.Queries;
using Musify.Application.Users.Responses; using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Handlers namespace Musify.Application.Users
{ {
public record GetUserByIdQuery(long Id)
: IQuery<ErrorOr<UserApplicationResponse> >;
public class GetUserByIdQueryHandler(IDatabase database) public class GetUserByIdQueryHandler(IDatabase database)
: IQueryHandler<GetUserByIdQuery, ErrorOr<UserApplicationResponse> > : IQueryHandler<GetUserByIdQuery, ErrorOr<UserApplicationResponse> >
{ {
@@ -2,13 +2,15 @@ using ErrorOr;
using Mediator; using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Musify.Application.Pagination; using Musify.Application.Pagination;
using Musify.Application.Users.Queries;
using Musify.Application.Users.Responses; using Musify.Application.Users.Responses;
using X.PagedList.EF; using X.PagedList.EF;
using Musify.Application.Contracts; using Musify.Application.Contracts;
namespace Musify.Application.Users.Handlers namespace Musify.Application.Users
{ {
public record GetUsersQuery(int PageNumber, int PageSize, string? UsernameSearch = null)
: IQuery<ErrorOr<PaginatedResponse<UserApplicationResponse> >>;
public class GetUsersQueryHandler(IDatabase database) public class GetUsersQueryHandler(IDatabase database)
: IQueryHandler<GetUsersQuery, ErrorOr<PaginatedResponse<UserApplicationResponse> > > : IQueryHandler<GetUsersQuery, ErrorOr<PaginatedResponse<UserApplicationResponse> > >
{ {
@@ -1,9 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Queries
{
public record GetUserByIdQuery(long Id)
: IQuery<ErrorOr<UserApplicationResponse> >;
}
@@ -1,10 +0,0 @@
using ErrorOr;
using Mediator;
using Musify.Application.Pagination;
using Musify.Application.Users.Responses;
namespace Musify.Application.Users.Queries
{
public record GetUsersQuery(int PageNumber, int PageSize, string? UsernameSearch = null)
: IQuery<ErrorOr<PaginatedResponse<UserApplicationResponse> >>;
}
@@ -3,11 +3,18 @@ using Mediator;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Musify.Application.Contracts; using Musify.Application.Contracts;
using Musify.Application.Users.Commands;
using Musify.Domain.Entities; using Musify.Domain.Entities;
namespace Musify.Application.Users.Handlers namespace Musify.Application.Users
{ {
public record SyncUserCommand(
long Id,
string Name,
string? FirstName,
string? SecondName,
string? ProfilePictureUrl)
: ICommand<ErrorOr<Success>>;
public class SyncUserCommandHandler(IDatabase database, ILogger<SyncUserCommandHandler> logger) public class SyncUserCommandHandler(IDatabase database, ILogger<SyncUserCommandHandler> logger)
: ICommandHandler<SyncUserCommand, ErrorOr<Success>> : ICommandHandler<SyncUserCommand, ErrorOr<Success>>
{ {