public async Task <IActionResult> GetLeagueYear(Guid leagueID, int year) { Maybe <LeagueYear> leagueYear = await _fantasyCriticService.GetLeagueYear(leagueID, year); if (leagueYear.HasNoValue) { throw new Exception("Something went really wrong, no options are set up for this league."); } var currentUser = await _userManager.FindByNameAsync(User.Identity.Name); var usersInLeague = await _fantasyCriticService.GetUsersInLeague(leagueYear.Value.League); bool userIsInLeague = usersInLeague.Any(x => x.UserID == currentUser.UserID); var inviteesToLeague = await _fantasyCriticService.GetOutstandingInvitees(leagueYear.Value.League); bool userIsInvitedToLeague = inviteesToLeague.Any(x => x == currentUser.EmailAddress); if (!userIsInLeague && !userIsInvitedToLeague) { return(Unauthorized()); } var publishersInLeague = await _fantasyCriticService.GetPublishersInLeagueForYear(leagueYear.Value.League, leagueYear.Value.Year); var supportedYear = (await _fantasyCriticService.GetSupportedYears()).SingleOrDefault(x => x.Year == year); if (supportedYear is null) { return(BadRequest()); } StartDraftResult startDraftResult = await _fantasyCriticService.GetStartDraftResult(leagueYear.Value, publishersInLeague, usersInLeague); Maybe <Publisher> nextDraftPublisher = await _fantasyCriticService.GetNextDraftPublisher(leagueYear.Value); DraftPhase draftPhase = await _fantasyCriticService.GetDraftPhase(leagueYear.Value); var userPublisher = publishersInLeague.SingleOrDefault(x => x.User.UserID == currentUser.UserID); IReadOnlyList <PublisherGame> availableCounterPicks = new List <PublisherGame>(); if (nextDraftPublisher.HasValue) { availableCounterPicks = await _fantasyCriticService.GetAvailableCounterPicks(leagueYear.Value, nextDraftPublisher.Value); } LeagueWideValues leagueWideValues = await _fantasyCriticService.GetLeagueWideValues(); var leagueViewModel = new LeagueYearViewModel(leagueYear.Value, supportedYear, publishersInLeague, currentUser, userPublisher, _clock, leagueYear.Value.PlayStatus, startDraftResult, usersInLeague, nextDraftPublisher, draftPhase, availableCounterPicks, leagueWideValues); return(Ok(leagueViewModel)); }