MyBookmark/Modules.User.Application/Commands/User/PersonalData/DeleteUserAvatarCommand.cs

45 lines
1.7 KiB
C#

using Common.Security.Interfaces;
using MediatR;
using Modules.Media.Api.Commands;
using Modules.User.Application.Interfaces;
using Modules.User.Application.Repositories;
namespace Modules.User.Application.Commands.User;
public class DeleteUserAvatarCommand : IRequest<Unit>
{
}
public class DeleteUserAvatarCommandHandler(IUserContext userContext, IUserRepository userRepository,
IMediator mediator, IUnitOfWork unitOfWork) : IRequestHandler<DeleteUserAvatarCommand, Unit>
{
public async Task<Unit> Handle(DeleteUserAvatarCommand request, CancellationToken cancellationToken)
{
var accountId = userContext.GetAccountId();
if (!accountId.HasValue) return Unit.Value;
//TODO: if (!accountId.HasValue) throw new UnauthorizedAccessException("AccountId not found");
var user = await userRepository.GetByAccountIdAsync(accountId.Value, cancellationToken);
if (user == null) return Unit.Value;
//TODO: if (user == null) throw new UserNotFoundException(); //"User not found"
if (user.Avatar != null)
{
var deleted = await mediator.Send(new DeleteObjectCommand
{
BucketName = "my-bookmark.user",
ObjectName = user.Avatar.Id,
}, cancellationToken);
if (!deleted)
{
//TODO: log error //throw new Exception("Failed to delete avatar from storage");
return Unit.Value;
}
user.SetAvatar(null);
}
await userRepository.SaveAsync(user, cancellationToken);
await unitOfWork.SaveChangesAsync(cancellationToken);
return Unit.Value;
}
}