public async Task <ActionResult> ChangeEmail(AdminChangeEmailModel model) { if (!ModelState.IsValid) { return(View("ChangeEmailModal", model)); } var result = await AdminUserWriter.ChangeEmail(User.Identity.GetUserId(), model); if (!ModelState.IsWriterResultValid(result)) { return(View("ChangeEmailModal", model)); } return(CloseModalSuccess(result.Message)); }
public async Task <IWriterResult> ChangeEmail(string userId, AdminChangeEmailModel model) { using (var context = DataContextFactory.CreateContext()) { var user = await context.Users.FirstOrDefaultNoLockAsync(x => x.UserName == model.UserName); if (user == null) { return(new WriterResult(false, $"User '{model.UserName}' not found")); } var existing = await context.Users.FirstOrDefaultNoLockAsync(x => x.Email == model.NewEmailAddress); if (existing != null) { return(new WriterResult(false, $"Email '{model.NewEmailAddress}' is already in use.")); } var approval = await context.ApprovalQueue.FirstOrDefaultNoLockAsync(x => x.DataUserId == user.Id && x.Type == Enums.ApprovalQueueType.ChangeEmail && x.Status == Enums.ApprovalQueueStatus.Pending); if (approval != null) { return(new WriterResult(false, "There is already an awaiting approval request for this user.")); } approval = new Entity.ApprovalQueue { DataUserId = user.Id, RequestUserId = userId, Type = Enums.ApprovalQueueType.ChangeEmail, Status = Enums.ApprovalQueueStatus.Pending, Created = DateTime.UtcNow, Data = JsonConvert.SerializeObject(model) }; context.ApprovalQueue.Add(approval); await context.SaveChangesAsync(); return(new WriterResult(true, "Email change request added to admin approval queue.")); } }