using AutoMapper; using UserManagement.Common.UnitOfWork; using UserManagement.Data; using UserManagement.Data.Dto; using UserManagement.Domain; using UserManagement.MediatR.Commands; using MediatR; using Microsoft.AspNetCore.Identity; using System.Threading; using System.Threading.Tasks; using UserManagement.Helper; using Microsoft.Extensions.Logging; namespace UserManagement.MediatR.Handlers { public class UpdateUserProfileCommandHandler( IMapper mapper, IUnitOfWork uow, UserInfoToken userInfoToken, UserManager userManager, ILogger logger, PathHelper pathHelper ) : IRequestHandler> { public readonly PathHelper _pathHelper = pathHelper; public async Task> Handle(UpdateUserProfileCommand request, CancellationToken cancellationToken) { var appUser = await userManager.FindByIdAsync(userInfoToken.Id); if (appUser == null) { logger.LogError("User does not exist."); return ServiceResponse.Return409("User does not exist."); } appUser.FirstName = request.FirstName; appUser.LastName = request.LastName; appUser.PhoneNumber = request.PhoneNumber; appUser.Address = request.Address; IdentityResult result = await userManager.UpdateAsync(appUser); if (await uow.SaveAsync(cancellationToken) <= 0 && !result.Succeeded) { return ServiceResponse.Return500(); } if (!string.IsNullOrWhiteSpace(appUser.ProfilePhoto)) appUser.ProfilePhoto = $"{_pathHelper.UserProfilePath}/{appUser.ProfilePhoto}"; return ServiceResponse.ReturnResultWith200(mapper.Map(appUser)); } } }