using MediatR; using Modules.Media.Api.Commands; using Modules.User.Application.Gateways; namespace Modules.User.Application.Commands; public class SetUserAvatarCommand : IRequest { public string Extension { get; set; } = default!; public string ContentType { get; set; } = default!; public Stream Data { get; set; } = default!; } public class SetUserAvatarCommandHandler(UserContext userContext, IUserGateway userGateway, IMediator mediator) : IRequestHandler { public async Task Handle(SetUserAvatarCommand request, CancellationToken cancellationToken) { var userInfo = await userContext.GetUserInfo(cancellationToken); if (userInfo?.AccountId == null) throw new Exception("User not found"); var user = await userGateway.Get(userInfo.AccountId.Value) ?? throw new Exception("User was not found"); var newAvatarId = await mediator.Send(new AddObjectCommand { ObjectName = !string.IsNullOrWhiteSpace(user.AvatarId) ? user.AvatarId : null, BusketName = "my-bookmark.user", ObjectPrefix = "avatar", ObjectExtension = request.Extension, ContentType = request.ContentType, Data = request.Data, }, cancellationToken); user.SetAvatar(newAvatarId); await userGateway.UpdateUser(user.Id, new Models.User { NickName = user.NickName, FirstName = user.FirstName, Patronymic = user.Patronymic, LastName = user.LastName, BirthDate = user.BirthDate, LanguageId = user.LanguageId, }, user.AvatarId); return Unit.Value; } }