public async Task <UserProfileDto?> UpdateUserAccountAsync( int locationId, IEnumerable <Claim> claims, UpdateNameEmailDto update) { var user_id = claims?.FirstOrDefault(x => x.Type == "ID"); int id; if (!int.TryParse(user_id?.Value, out id)) { return(null); } var user = await _context.Users .Include(x => x.UserKeyMappings) .ThenInclude(x => x.Keyholder) .Include(x => x.ChangeEmailRequests) .Include(x => x.UserLocations) .FirstOrDefaultAsync(x => x.UserID == id); var keyholdemap = user?.UserKeyMappings?.FirstOrDefault(x => x.LocationId == locationId); if (keyholdemap == null) { return(null); } ; if (update.name != null) { user.Name = update.name; } Task save; if (update.email != null) { var email = EmailOperations.sendVerificationEmail( user.Name, update.email, user.VerificationToken, true); user.Email = update.email; user.VerificationToken = Authentication.generateEmailTokenHash(); user.VerificationTokenExpiry = DateTime.UtcNow.AddDays(1); var changeRequest = new ChangeEmailRequest() { User = user, RequestedOn = DateTime.UtcNow, Email = update.email, VerificationToken = user.VerificationToken, VerificationTokenExpiry = user.VerificationTokenExpiry, }; await _context.EmailChangeRequests.AddAsync(changeRequest); _context.Users.Update(user); await email; save = _context.SaveChangesAsync(); } else { _context.Users.Update(user); save = _context.SaveChangesAsync(); } var model = _mapper.Map <UserProfileDto>(user); model.locationId = locationId; var tookit = _mapper.Map <ToolkitInfoDto>(keyholdemap.Keyholder); model.toolkitInfo = tookit; await save; return(model); }
public async Task <IActionResult> UpdateUserProfile([FromRoute] int locationId, UpdateNameEmailDto update) { var ret = await _repository.UpdateUserAccountAsync(locationId, User.Claims, update); if (ret == null) { return(BadRequest()); } return(Ok(ret)); }