public async Task <IWriterResult> ApproveChangeEmail(string userId, AdminChangeEmailApproveModel model) { var syncUserId = string.Empty; using (var context = DataContextFactory.CreateContext()) { if (model.Status == ApprovalQueueStatus.Pending) { return(new WriterResult(false, $"Unable to set item to {model.Status}.")); } var approval = await context.ApprovalQueue.FirstOrDefaultNoLockAsync(x => x.Id == model.ApprovalId && x.Type == ApprovalQueueType.ChangeEmail); if (approval == null) { return(new WriterResult(false, "Not Found.")); } if (approval.Status != Enums.ApprovalQueueStatus.Pending) { return(new WriterResult(false, $"Unable to approve {approval.Type} status is {approval.Status}.")); } if (approval.RequestUserId == userId) { return(new WriterResult(false, $"Another admin must approve this {approval.Type}.")); } var existing = await context.Users.FirstOrDefaultNoLockAsync(x => x.Email == approval.Data); if (existing != null && model.Status == ApprovalQueueStatus.Approved) { return(new WriterResult(false, $"Email '{approval.Data}' is already in use.")); } approval.Status = model.Status; approval.Message = model.Message; approval.ApproveUserId = userId; approval.Approved = DateTime.UtcNow; if (model.Status == ApprovalQueueStatus.Approved) { syncUserId = approval.DataUserId; approval.DataUser.Email = JsonConvert.DeserializeObject <AdminChangeEmailModel>(approval.Data).NewEmailAddress; } await context.SaveChangesAsync(); } await UserSyncService.SyncUser(syncUserId); return(new WriterResult(true, model.Status == ApprovalQueueStatus.Approved ? "Action approved, users email address has now been updated." : "Action Rejected, email change rejected.")); }
public async Task <ActionResult> ApproveChangeEmail(AdminChangeEmailApproveModel model) { if (!ModelState.IsValid) { return(View("ChangeEmailApproveModal", model)); } var result = await AdminUserWriter.ApproveChangeEmail(User.Identity.GetUserId(), model); if (!ModelState.IsWriterResultValid(result)) { return(View("ChangeEmailApproveModal", model)); } return(CloseModalSuccess(result.Message)); }