public async Task <GetGameInfoHistoryResponseView> GetGameInfo(string userId, GetGameInfoHistoryView model) { var game = await _gameRepository.GetByIdAsync(model.GameId); var response = new GetGameInfoHistoryResponseView(); response.Steps = new List <StepGetGameInfoHistoryResponseViewItem>(game.CountStep); for (int i = 0; i < game.CountStep; i++) { response.Steps.Add(new StepGetGameInfoHistoryResponseViewItem()); } response.Steps.ForEach( x => { x.PlayerInfo = new List <PlayerInfoGetGameInfoHistoryResponseViewItem>(); }); var userSteps = (await _usersStepRepository.GetStepsByGameIdAsync(model.GameId)).ToList(); var botSteps = (await _botsStepRepository.GetStepsByGameIdAsync(model.GameId)).ToList(); var userName = (await _userRepository.GetByIdAsync(userId)).UserName; userSteps.ForEach( x => { var pi = new PlayerInfoGetGameInfoHistoryResponseViewItem() { Name = userName, Card = new CardGetGameInfoHistoryResponseView() { Suit = new SuitGetGameInfoHistoryResponseView() { Suit = (int)x.Suit, SuitAsString = x.Suit.ToString() }, Rank = new RankGetGameInfoHistoryResponseView() { Rank = (int)x.Rank, RankAsString = x.Rank.ToString() } } }; response.Steps.ElementAt(x.StepNumder - 1).PlayerInfo.Add(pi); }); botSteps.ForEach( x => { var pi = new PlayerInfoGetGameInfoHistoryResponseViewItem() { Name = x.Bot.Name, Card = new CardGetGameInfoHistoryResponseView() { Suit = new SuitGetGameInfoHistoryResponseView() { Suit = (int)x.Suit, SuitAsString = x.Suit.ToString() }, Rank = new RankGetGameInfoHistoryResponseView() { Rank = (int)x.Rank, RankAsString = x.Rank.ToString() } } }; response.Steps.ElementAt(x.StepNumder - 1).PlayerInfo.Add(pi); }); response.Summary = new List <PlayersSummaryGetGameInfoHistoryResponseViewItem>(); var botPoints = (await _botsPointsRepository.GetPointsByGameIdAsync(model.GameId)).ToList(); var userPoints = (await _usersPointsRepository.GetPointsByGameIdAsync(model.GameId)); var winningPoints = Constants.GameSettings.InitionalPoints; botPoints.ForEach( bp => { if (bp.Points > winningPoints && bp.Points <= Constants.GameSettings.WinningNumber) { winningPoints = bp.Points; } }); if (userPoints.Points > winningPoints && userPoints.Points <= Constants.GameSettings.WinningNumber) { winningPoints = userPoints.Points; } response.Summary.Add(new PlayersSummaryGetGameInfoHistoryResponseViewItem() { Name = userName, Points = userPoints.Points, State = new StateGetGameInfoHistoryResponseView() { State = userPoints.Points == winningPoints ? (int)UserGameStateType.Win : (int)UserGameStateType.Lose, StateAsString = userPoints.Points == winningPoints ? UserGameStateType.Win.ToString() : UserGameStateType.Lose.ToString() } }); botPoints.ForEach( bp => { response.Summary.Add(new PlayersSummaryGetGameInfoHistoryResponseViewItem() { Name = bp.Bot.Name, Points = bp.Points, State = new StateGetGameInfoHistoryResponseView() { State = bp.Points == winningPoints ? (int)UserGameStateType.Win : (int)UserGameStateType.Lose, StateAsString = bp.Points == winningPoints ? UserGameStateType.Win.ToString() : UserGameStateType.Lose.ToString() } }); }); return(response); }
public async Task<GenericResponseView<GetGameInfoHistoryResponseView>> GetGameInfo([FromBody]GetGameInfoHistoryView model) { var response = new GenericResponseView<GetGameInfoHistoryResponseView>(); response.Model = await _historyService.GetGameInfo(UserId, model); return response; }