public async Task <ActionResult <Guid> > POST([FromBody] RegisterTeamViewModel registerTeamViewModel) { // Generate a unique playerID var player = new Player(registerTeamViewModel.TeamName); var hashedPassword = _passwordHashing.HashPassword(registerTeamViewModel.Password); await _database.SavePlayer(player, hashedPassword); // Reload the player var reloadedPlayer = await _database.LoadPlayer(player.ID); if (reloadedPlayer == null) { var details = new ValidationProblemDetails { Detail = $"No player with the ID {player.ID} exists" }; return(ValidationProblem(details)); } if (!_passwordHashing.CompareHashes(registerTeamViewModel.Password, reloadedPlayer.Password)) { return(Forbid()); } // Create them a game for them to develop against if (!reloadedPlayer.CurrentGameID.HasValue) { await _gameCreator.CreateInitialGame(reloadedPlayer.ID); } return(reloadedPlayer.ID); }
public async Task <IHttpActionResult> Post(RegisterTeamViewModel viewModel) { try { var user = new ApplicationUser { Email = viewModel.Email, UserName = viewModel.Email, PhoneNumber = viewModel.HomePhoneNumber }; var response = await _userManager.CreateAsync(user, viewModel.Password); if (response.Succeeded) { var roleResponse = await _userManager.AddToRoleAsync(user.Id, Roles.TeamSponsor); if (!roleResponse.Succeeded) { ThrowIdentityResponseError(response, user.Email); } await SendTeamSponsorEmailAsync(user.Id, viewModel.Name); var team = _mapper.Map <RegisterTeamViewModel, Team>(viewModel); team.AspNetUser_Id = user.Id; _dbContext.Teams.Add(team); _dbContext.SaveChanges(); } else { ThrowIdentityResponseError(response, user.Email); } return(Ok()); } catch (Exception ex) { return(InternalServerError(ex)); } }