44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using Knot.Shared.Kernel;
|
|
using Knot.Modules.Identity.Domain;
|
|
using Knot.Modules.Identity.Application.Abstractions;
|
|
|
|
namespace Knot.Modules.Identity.Application.Users.Avatar;
|
|
|
|
public sealed record DeleteAvatarCommand(Guid UserId) : ICommand<UserProfileDto>;
|
|
|
|
internal sealed class DeleteAvatarCommandHandler : ICommandHandler<DeleteAvatarCommand, UserProfileDto>
|
|
{
|
|
private readonly IUserRepository _userRepository;
|
|
private readonly IIdentityUnitOfWork _unitOfWork;
|
|
|
|
public DeleteAvatarCommandHandler(IUserRepository userRepository, IIdentityUnitOfWork unitOfWork)
|
|
{
|
|
_userRepository = userRepository;
|
|
_unitOfWork = unitOfWork;
|
|
}
|
|
|
|
public async Task<Result<UserProfileDto>> Handle(DeleteAvatarCommand request, CancellationToken cancellationToken)
|
|
{
|
|
var user = await _userRepository.GetByIdAsync(request.UserId, cancellationToken);
|
|
if (user == null)
|
|
{
|
|
return Result.Failure<UserProfileDto>(IdentityErrors.UserNotFound);
|
|
}
|
|
|
|
user.UpdateAvatar(null);
|
|
await _unitOfWork.SaveChangesAsync(cancellationToken);
|
|
|
|
var dto = new UserProfileDto(
|
|
user.Id,
|
|
user.Username,
|
|
user.DisplayName,
|
|
user.Avatar,
|
|
user.Bio,
|
|
user.Birthday,
|
|
user.CreatedAt
|
|
);
|
|
|
|
return Result.Success(dto);
|
|
}
|
|
}
|