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; internal sealed class DeleteAvatarCommandHandler : ICommandHandler { private readonly IUserRepository _userRepository; private readonly IIdentityUnitOfWork _unitOfWork; public DeleteAvatarCommandHandler(IUserRepository userRepository, IIdentityUnitOfWork unitOfWork) { _userRepository = userRepository; _unitOfWork = unitOfWork; } public async Task> Handle(DeleteAvatarCommand request, CancellationToken cancellationToken) { var user = await _userRepository.GetByIdAsync(request.UserId, cancellationToken); if (user == null) { return Result.Failure(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); } }