public async Task <IActionResult> RemoveTrainer(TrainerRemoveInputModel input) { try { await this.administrationService.RemoveTrainer(input); } catch (Exception e) { this.ModelState.AddModelError("trainer", e.Message); } if (!this.ModelState.IsValid) { return(this.View()); } return(this.Redirect("/")); }
public async Task RemoveTrainer(TrainerRemoveInputModel input) { var trainer = await this.db.Users.FirstOrDefaultAsync(u => u.Email == input.Email); if (trainer == null) { throw new ArgumentException("Няма регистриран човек с този е-мейл."); } var asTrainer = trainer as Trainer; if (asTrainer == null) { throw new ArgumentException("Този човек не е треньор."); } var oldRoles = new List <IdentityUserRole <string> >(); var userRoles = await this.db.UserRoles.Where(ur => ur.UserId == trainer.Id).ToListAsync(); var trainerRoleId = (await this.db.Roles.FirstOrDefaultAsync(r => r.Name == GlobalConstants.TrainerRoleName)).Id; oldRoles.AddRange(userRoles.Where(ur => ur.RoleId != trainerRoleId).ToList()); var usersWhosTrainer = this.db.Users.Where(u => u.TrainerId == asTrainer.Id).ToList(); foreach (var client in usersWhosTrainer) { client.Trainer = null; client.TrainerId = null; } this.db.UserRoles.RemoveRange(userRoles); await this.db.SaveChangesAsync(); var user = new ApplicationUser() { UserName = trainer.UserName, Roles = trainer.Roles, Claims = trainer.Claims, TwoFactorEnabled = trainer.TwoFactorEnabled, PhoneNumber = trainer.PhoneNumber, ConcurrencyStamp = trainer.ConcurrencyStamp, NormalizedEmail = trainer.NormalizedEmail, Email = trainer.Email, NormalizedUserName = trainer.NormalizedUserName, EmailConfirmed = trainer.EmailConfirmed, SecurityStamp = trainer.SecurityStamp, PasswordHash = trainer.PasswordHash, PhoneNumberConfirmed = trainer.PhoneNumberConfirmed, Logins = trainer.Logins, }; this.db.Users.Remove(trainer); await this.db.Users.AddAsync(user); await this.db.SaveChangesAsync(); oldRoles.ForEach(r => r.UserId = user.Id); await this.db.UserRoles.AddRangeAsync(oldRoles); await this.db.SaveChangesAsync(); }