using AutoMapper; using BlackRock.Reporting.API.Mediator.Dto; using BlackRock.Reporting.API.Mediator.Model; using BlackRock.Reporting.API.Core; using BlackRock.Reporting.API.Core.Models; using MediatR; namespace BlackRock.Reporting.API.Mediator.Commands { public class UpdateEmailUsersCommand : IRequest> { public UserCommand User { get; } public int Id { get; } public UpdateEmailUsersCommand(int id, UserCommand user) { this.Id = id; this.User = user; } } public class UpdateEmailUsersCommandHandlers : IRequestHandler> { private readonly ILogger logger; private readonly IMapper mapper; private readonly IUnitOfWork unitOfWork; public UpdateEmailUsersCommandHandlers(ILogger logger, IMapper mapper, IUnitOfWork unitOfWork) { this.unitOfWork = unitOfWork; this.mapper = mapper; this.logger = logger; } public async Task> Handle(UpdateEmailUsersCommand command, CancellationToken cancellationToken) { if (command.Id <= 0) throw new ArgumentException($"Parameter {nameof(command.Id)} must not be grater than 0"); logger.LogInformation("Updating user email ..."); try { var user = await unitOfWork.UsersRepository.GetByIdAsync(command.Id); unitOfWork.UsersRepository.UpdateEmail(user,command.User.Email); await unitOfWork.SaveChangesAsync(); var updatedUser = mapper.Map(user); logger.LogInformation($"Email of the user with id {user.Id} has been updated successfully"); return new Result { Data = updatedUser }; } catch (Exception ex) { return new Result { IsSuccess = false, Error = "Faild to update data in DB." }; } } } }