public async Task <IActionResult> ManagerDraftGame([FromBody] ManagerDraftGameRequest request) { var currentUser = await _userManager.FindByNameAsync(User.Identity.Name); if (!ModelState.IsValid) { return(BadRequest()); } var publisher = await _fantasyCriticService.GetPublisher(request.PublisherID); if (publisher.HasNoValue) { return(BadRequest()); } var league = await _fantasyCriticService.GetLeagueByID(publisher.Value.League.LeagueID); if (league.HasNoValue) { return(BadRequest()); } if (league.Value.LeagueManager.UserID != currentUser.UserID) { return(Forbid()); } var leagueYear = await _fantasyCriticService.GetLeagueYear(league.Value.LeagueID, publisher.Value.Year); if (leagueYear.HasNoValue) { return(BadRequest()); } if (!leagueYear.Value.PlayStatus.DraftIsActive) { return(BadRequest("You can't draft a game if the draft isn't active.")); } var nextPublisher = await _fantasyCriticService.GetNextDraftPublisher(leagueYear.Value); if (nextPublisher.HasNoValue) { return(BadRequest("There are no spots open to draft.")); } if (!nextPublisher.Value.Equals(publisher.Value)) { return(BadRequest("That publisher is not next up for drafting.")); } Maybe <MasterGame> masterGame = Maybe <MasterGame> .None; if (request.MasterGameID.HasValue) { masterGame = await _fantasyCriticService.GetMasterGame(request.MasterGameID.Value); } int?publisherPosition = null; int?overallPosition = null; var draftPhase = await _fantasyCriticService.GetDraftPhase(leagueYear.Value); if (draftPhase.Equals(DraftPhase.StandardGames)) { publisherPosition = publisher.Value.PublisherGames.Count(x => !x.CounterPick) + 1; var publishers = await _fantasyCriticService.GetPublishersInLeagueForYear(league.Value, leagueYear.Value.Year); overallPosition = publishers.SelectMany(x => x.PublisherGames).Count(x => !x.CounterPick) + 1; if (request.CounterPick) { return(BadRequest("Not drafting counterPicks now.")); } } if (draftPhase.Equals(DraftPhase.CounterPicks)) { if (!request.CounterPick) { return(BadRequest("Not drafting standard games now.")); } } ClaimGameDomainRequest domainRequest = new ClaimGameDomainRequest(publisher.Value, request.GameName, request.CounterPick, request.ManagerOverride, masterGame, publisherPosition, overallPosition); ClaimResult result = await _fantasyCriticService.ClaimGame(domainRequest); bool draftCompleted = await _fantasyCriticService.CompleteDraft(leagueYear.Value); var viewModel = new ManagerClaimResultViewModel(result); await _hubcontext.Clients.All.SendAsync("RefreshLeagueYear", leagueYear.Value); if (draftCompleted) { await _hubcontext.Clients.All.SendAsync("DraftFinished", leagueYear.Value); } return(Ok(viewModel)); }