コード例 #1
0
        private static IQueryable <PlayedGameSearchResult> AddSearchCriteria(PlayedGameFilter playedGameFilter, IQueryable <PlayedGameSearchResult> queryable)
        {
            if (playedGameFilter.GamingGroupId.HasValue)
            {
                queryable = queryable.Where(query => query.GamingGroupId == playedGameFilter.GamingGroupId.Value);
            }

            if (playedGameFilter.GameDefinitionId.HasValue)
            {
                queryable = queryable.Where(query => query.GameDefinitionId == playedGameFilter.GameDefinitionId.Value);
            }

            if (!string.IsNullOrEmpty(playedGameFilter.StartDateGameLastUpdated))
            {
                var startDate = ParseDateTime(playedGameFilter.StartDateGameLastUpdated);
                queryable = queryable.Where(query => query.DateLastUpdated >= startDate);
            }

            if (!string.IsNullOrEmpty(playedGameFilter.EndDateGameLastUpdated))
            {
                var endDate = ParseDateTime(playedGameFilter.EndDateGameLastUpdated);
                endDate   = endDate.Date.AddDays(1).AddMilliseconds(-1);
                queryable = queryable.Where(query => query.DateLastUpdated <= endDate);
            }

            if (!string.IsNullOrEmpty(playedGameFilter.DatePlayedFrom))
            {
                var fromDate = ParseDateTime(playedGameFilter.DatePlayedFrom);
                queryable = queryable.Where(query => query.DatePlayed >= fromDate);
            }

            if (!string.IsNullOrEmpty(playedGameFilter.DatePlayedTo))
            {
                var toDate = ParseDateTime(playedGameFilter.DatePlayedTo);
                toDate    = toDate.Date.AddDays(1).AddMilliseconds(-1);
                queryable = queryable.Where(query => query.DatePlayed <= toDate);
            }

            if (playedGameFilter.PlayerId.HasValue)
            {
                queryable = queryable.Where(query => query.PlayerGameResults.Any(x => x.PlayerId == playedGameFilter.PlayerId));
            }

            if (playedGameFilter.MaximumNumberOfResults.HasValue)
            {
                queryable = queryable.Take(playedGameFilter.MaximumNumberOfResults.Value);
            }

            if (!string.IsNullOrEmpty(playedGameFilter.ExclusionApplicationName))
            {
                queryable = queryable.Where(query => query.ApplicationLinkages.All(x => x.ApplicationName != playedGameFilter.ExclusionApplicationName));
            }

            if (!string.IsNullOrEmpty(playedGameFilter.InclusionApplicationName))
            {
                queryable = queryable.Where(query => query.ApplicationLinkages.Any(x => x.ApplicationName == playedGameFilter.InclusionApplicationName));
            }

            return(queryable);
        }
コード例 #2
0
        public virtual ActionResult Search(PlayedGamesFilterViewModel filter, ApplicationUser currentUser)
        {
            var playedGameFilter = new PlayedGameFilter
            {
                EndDateGameLastUpdated   = filter.DatePlayedEnd?.ToString("yyyy-MM-dd"),
                GamingGroupId            = currentUser.CurrentGamingGroupId,
                StartDateGameLastUpdated = filter.DatePlayedStart?.ToString("yyyy-MM-dd"),
                GameDefinitionId         = filter.GameDefinitionId,
                PlayerId = filter.IncludedPlayerId
            };
            var searchResults = _playedGameRetriever.SearchPlayedGames(playedGameFilter);

            var playedGamesDetails = searchResults.Select(searchResult => new PlayedGameDetailsViewModel
            {
                DatePlayed         = searchResult.DatePlayed,
                GameDefinitionId   = searchResult.GameDefinitionId,
                GameDefinitionName = searchResult.GameDefinitionName,
                GamingGroupId      = searchResult.GamingGroupId,
                GamingGroupName    = searchResult.GamingGroupName,
                Notes         = searchResult.Notes,
                PlayedGameId  = searchResult.PlayedGameId,
                UserCanEdit   = true,
                WinnerType    = searchResult.WinnerType,
                PlayerResults = searchResult.PlayerGameResults.Select(playerResult => new GameResultViewModel
                {
                    DatePlayed         = searchResult.DatePlayed,
                    GameDefinitionId   = searchResult.GameDefinitionId,
                    GameDefinitionName = searchResult.GameDefinitionName,
                    GameRank           = playerResult.GameRank,
                    NemePointsSummary  = new NemePointsSummaryViewModel(playerResult.NemeStatsPointsAwarded, playerResult.GameDurationBonusNemePoints, playerResult.GameWeightBonusNemePoints),
                    PlayedGameId       = searchResult.PlayedGameId,
                    PlayerId           = playerResult.PlayerId,
                    PlayerName         = playerResult.PlayerName,
                    PointsScored       = playerResult.PointsScored,
                    WinnerType         = searchResult.WinnerType
                }).ToList()
            }).ToList();

            var viewModel = new SearchViewModel
            {
                Filter =
                {
                    DatePlayedEnd    = filter.DatePlayedEnd,
                    DatePlayedStart  = filter.DatePlayedStart,
                    GameDefinitionId = filter.GameDefinitionId
                },
                GameDefinitions = GetAllGameDefinitionsForCurrentGamingGroup(currentUser.CurrentGamingGroupId.Value),
                PlayedGames     = new PlayedGamesViewModel
                {
                    PlayedGameDetailsViewModels = playedGamesDetails,
                    UserCanEdit   = true,
                    GamingGroupId = currentUser.CurrentGamingGroupId,
                    ShowSearchLinkInResultsHeader = false
                }
            };

            AddPlayersToViewModel(currentUser.CurrentGamingGroupId.Value, viewModel, filter.IncludedPlayerId);

            return(View(MVC.PlayedGame.Views.Search, viewModel));
        }
コード例 #3
0
        private static IQueryable <PlayedGameSearchResult> AddSearchCriteria(PlayedGameFilter playedGameFilter, IQueryable <PlayedGameSearchResult> queryable)
        {
            if (playedGameFilter.GamingGroupId.HasValue)
            {
                queryable = queryable.Where(query => query.GamingGroupId == playedGameFilter.GamingGroupId.Value);
            }

            if (playedGameFilter.GameDefinitionId.HasValue)
            {
                queryable = queryable.Where(query => query.GameDefinitionId == playedGameFilter.GameDefinitionId.Value);
            }

            if (!string.IsNullOrEmpty(playedGameFilter.StartDateGameLastUpdated))
            {
                var startDate = ParseDateTime(playedGameFilter.StartDateGameLastUpdated);
                queryable = queryable.Where(query => DbFunctions.TruncateTime(query.DateLastUpdated) >= startDate);
            }

            if (!string.IsNullOrEmpty(playedGameFilter.EndDateGameLastUpdated))
            {
                var endDate = ParseDateTime(playedGameFilter.EndDateGameLastUpdated);
                queryable = queryable.Where(query => DbFunctions.TruncateTime(query.DateLastUpdated) <= endDate);
            }

            if (playedGameFilter.PlayerId.HasValue)
            {
                queryable = queryable.Where(query => query.PlayerGameResults.Any(x => x.PlayerId == playedGameFilter.PlayerId));
            }

            if (playedGameFilter.MaximumNumberOfResults.HasValue)
            {
                queryable = queryable.Take(playedGameFilter.MaximumNumberOfResults.Value);
            }
            return(queryable);
        }
コード例 #4
0
        public void ItExcludesPlaysForGamesThatAreNotActive()
        {
            var filter = new PlayedGameFilter();

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.That(!results.Any(x => x.GameDefinitionId == INACTIVE_GAME_DEFINITION_ID));
        }
コード例 #5
0
        public virtual ActionResult Search(PlayedGamesFilterViewModel filter, ApplicationUser currentUser)
        {
            var playedGameFilter = new PlayedGameFilter
            {
                EndDateGameLastUpdated   = filter.DatePlayedEnd == null ? null : filter.DatePlayedEnd.Value.ToString("yyyy-MM-dd"),
                GamingGroupId            = currentUser.CurrentGamingGroupId,
                StartDateGameLastUpdated = filter.DatePlayedStart == null ? null : filter.DatePlayedStart.Value.ToString("yyyy-MM-dd"),
                GameDefinitionId         = filter.GameDefinitionId
            };
            var searchResults = playedGameRetriever.SearchPlayedGames(playedGameFilter);

            var playedGamesDetails = searchResults.Select(searchResult => new PlayedGameDetailsViewModel
            {
                DatePlayed         = searchResult.DatePlayed,
                GameDefinitionId   = searchResult.GameDefinitionId,
                GameDefinitionName = searchResult.GameDefinitionName,
                GamingGroupId      = searchResult.GamingGroupId,
                GamingGroupName    = searchResult.GamingGroupName,
                Notes         = searchResult.Notes,
                PlayedGameId  = searchResult.PlayedGameId,
                UserCanEdit   = true,
                WinnerType    = PlayedGameDetailsViewModelBuilder.CalculateWinnerType(searchResult.PlayerGameResults.Select(x => x.GameRank).ToList()),
                PlayerResults = searchResult.PlayerGameResults.Select(playerResult => new GameResultViewModel
                {
                    DatePlayed             = searchResult.DatePlayed,
                    GameDefinitionId       = searchResult.GameDefinitionId,
                    GameDefinitionName     = searchResult.GameDefinitionName,
                    GameRank               = playerResult.GameRank,
                    NemeStatsPointsAwarded = playerResult.NemeStatsPointsAwarded,
                    PlayedGameId           = searchResult.PlayedGameId,
                    PlayerId               = playerResult.PlayerId,
                    PlayerName             = playerResult.PlayerName
                }).ToList()
            }).ToList();

            var viewModel = new SearchViewModel
            {
                Filter =
                {
                    DatePlayedEnd    = filter.DatePlayedEnd,
                    DatePlayedStart  = filter.DatePlayedStart,
                    GameDefinitionId = filter.GameDefinitionId
                },
                GameDefinitions = GetAllGameDefinitionsForCurrentGamingGroup(currentUser.CurrentGamingGroupId),
                PlayedGames     = new PlayedGamesViewModel
                {
                    PlayedGameDetailsViewModels = playedGamesDetails,
                    UserCanEdit   = true,
                    PanelTitle    = string.Format("{0} Results", playedGamesDetails.Count),
                    GamingGroupId = currentUser.CurrentGamingGroupId,
                    ShowSearchLinkInResultsHeader = false
                }
            };

            return(View(MVC.PlayedGame.Views.Search, viewModel));
        }
コード例 #6
0
        public void ItFiltersOnTheGameDefinitionId()
        {
            var filter = new PlayedGameFilter
            {
                GameDefinitionId = EXPECTED_GAME_DEFINITION_ID
            };

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.True(results.All(result => result.GameDefinitionId == filter.GameDefinitionId));
        }
コード例 #7
0
        public void ItFiltersOnTheGamingGroupId()
        {
            var filter = new PlayedGameFilter
            {
                GamingGroupId = EXPECTED_GAMING_GROUP_ID
            };

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.True(results.All(result => result.GamingGroupId == filter.GamingGroupId));
        }
コード例 #8
0
        public void ItFiltersOnThePlayerId()
        {
            var filter = new PlayedGameFilter
            {
                PlayerId = EXPECTED_PLAYER_ID
            };

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.True(results.All(result => result.PlayerGameResults.Any(x => x.PlayerId == filter.PlayerId)));
        }
コード例 #9
0
        public void ItLimitsSearchResultsToTheMaximumSpecified()
        {
            const int MAX_RESULTS = 1;
            var       filter      = new PlayedGameFilter
            {
                MaximumNumberOfResults = MAX_RESULTS
            };

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.That(results.Count, Is.EqualTo(MAX_RESULTS));
        }
コード例 #10
0
        public void ItFiltersOnEndDateGameLastUpdated()
        {
            var filter = new PlayedGameFilter
            {
                EndDateGameLastUpdated = "2015-03-01"
            };

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.That(results.Count, Is.EqualTo(1));
            Assert.True(results.All(x => x.DateLastUpdated.Date <= new DateTime(2015, 3, 1)));
        }
コード例 #11
0
        public void ItFiltersOnDatePlayedTo()
        {
            var filter = new PlayedGameFilter
            {
                DatePlayedTo = DATE_MARCH.ToString("yyyy-MM-dd")
            };

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.That(results.Count, Is.EqualTo(1));
            Assert.True(results.All(x => x.DatePlayed <= DATE_MARCH));
        }
コード例 #12
0
        public void ItFiltersOnStartDateGameLastUpdated()
        {
            var filter = new PlayedGameFilter
            {
                StartDateGameLastUpdated = DATE_APRIL.ToString("yyyy-MM-dd")
            };

            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            Assert.That(results.Count, Is.EqualTo(1));
            Assert.True(results.All(x => x.DateLastUpdated >= new DateTime(2015, 4, 1)));
        }
コード例 #13
0
        public void ItThrowsAnInvalidDateFormatExceptionIfTheDateIsntYYYYMMDD()
        {
            var filter = new PlayedGameFilter
            {
                EndDateGameLastUpdated = "2015-3-1"
            };
            var expectedExceptionMessage = new InvalidDateFormatException(filter.EndDateGameLastUpdated).Message;

            var actualException = Assert.Throws <InvalidDateFormatException>(() => autoMocker.ClassUnderTest.SearchPlayedGames(filter));

            Assert.That(actualException.Message, Is.EqualTo(expectedExceptionMessage));
        }
コード例 #14
0
        public void ItFiltersOnTheInclusionExternalSourceName()
        {
            //--arrange
            var filter = new PlayedGameFilter
            {
                InclusionApplicationName = EXTERNAL_SOURCE_NAME
            };

            //--act
            var results = autoMocker.ClassUnderTest.SearchPlayedGames(filter);

            //--assert
            Assert.True(results.All(result => result.ApplicationLinkages.Any(x => x.ApplicationName == EXTERNAL_SOURCE_NAME)));
        }
コード例 #15
0
        public List <PlayedGameSearchResult> SearchPlayedGames(PlayedGameFilter playedGameFilter)
        {
            var queryable = from playedGame in _dataContext.GetQueryable <PlayedGame>()
                            .Where(x => x.GameDefinition.Active)
                            .OrderByDescending(game => game.DatePlayed)
                            .ThenByDescending(game => game.DateCreated)
                            select new PlayedGameSearchResult
            {
                PlayedGameId                  = playedGame.Id,
                GameDefinitionId              = playedGame.GameDefinitionId,
                GameDefinitionName            = playedGame.GameDefinition.Name,
                BoardGameGeekGameDefinitionId = playedGame.GameDefinition.BoardGameGeekGameDefinitionId,
                GamingGroupId                 = playedGame.GamingGroupId,
                GamingGroupName               = playedGame.GamingGroup.Name,
                Notes               = playedGame.Notes,
                DatePlayed          = playedGame.DatePlayed,
                DateLastUpdated     = playedGame.DateCreated,
                WinnerType          = playedGame.WinnerType,
                ApplicationLinkages = playedGame.ApplicationLinkages.Select(x => new ApplicationLinkage
                {
                    ApplicationName = x.ApplicationName,
                    EntityId        = x.EntityId
                }).ToList(),
                PlayerGameResults = playedGame.PlayerGameResults.Select(x => new PlayerResult
                {
                    GameRank = x.GameRank,
                    NemeStatsPointsAwarded      = x.NemeStatsPointsAwarded,
                    GameDurationBonusNemePoints = x.GameDurationBonusPoints,
                    GameWeightBonusNemePoints   = x.GameWeightBonusPoints,
                    TotalPoints      = x.TotalPoints,
                    PlayerId         = x.PlayerId,
                    PlayerName       = x.Player.Name,
                    PlayerActive     = x.Player.Active,
                    PointsScored     = x.PointsScored,
                    DatePlayed       = x.PlayedGame.DatePlayed,
                    GameDefinitionId = x.PlayedGame.GameDefinitionId,
                    GameName         = x.PlayedGame.GameDefinition.Name,
                    PlayedGameId     = x.PlayedGameId
                }).ToList()
            };

            queryable = AddSearchCriteria(playedGameFilter, queryable);

            var results = queryable.ToList();

            SortPlayerResultsWithinEachSearchResult(results);

            return(results);
        }
コード例 #16
0
        private HttpResponseMessage GetPlayedGameSearchResults(PlayedGameFilterMessage playedGameFilterMessage)
        {
            var filter = new PlayedGameFilter();

            if (playedGameFilterMessage != null)
            {
                filter.GamingGroupId            = playedGameFilterMessage.GamingGroupId;
                filter.StartDateGameLastUpdated = playedGameFilterMessage.StartDateGameLastUpdated;
                filter.MaximumNumberOfResults   = playedGameFilterMessage.MaximumNumberOfResults;
                filter.PlayerId = playedGameFilterMessage.PlayerId;
            }
            var searchResults = this.playedGameRetriever.SearchPlayedGames(filter);

            var playedGamesSearchResultMessage = new PlayedGameSearchResultsMessage
            {
                PlayedGames = searchResults.Select(Mapper.Map <PlayedGameSearchResultMessage>).ToList()
            };

            return(this.Request.CreateResponse(HttpStatusCode.OK, playedGamesSearchResultMessage));
        }
コード例 #17
0
        public List <PlayedGameSearchResult> SearchPlayedGames(PlayedGameFilter playedGameFilter)
        {
            var queryable = (from playedGame in dataContext.GetQueryable <PlayedGame>()
                             .OrderByDescending(game => game.DatePlayed)
                             .ThenByDescending(game => game.DateCreated)
                             select new PlayedGameSearchResult
            {
                PlayedGameId = playedGame.Id,
                GameDefinitionId = playedGame.GameDefinitionId,
                GameDefinitionName = playedGame.GameDefinition.Name,
                BoardGameGeekGameDefinitionId = playedGame.GameDefinition.BoardGameGeekGameDefinitionId,
                GamingGroupId = playedGame.GamingGroupId,
                GamingGroupName = playedGame.GamingGroup.Name,
                Notes = playedGame.Notes,
                DatePlayed = playedGame.DatePlayed,
                DateLastUpdated = playedGame.DateCreated,
                PlayerGameResults = playedGame.PlayerGameResults.Select(x => new PlayerResult
                {
                    GameRank = x.GameRank,
                    NemeStatsPointsAwarded = x.NemeStatsPointsAwarded,
                    PlayerId = x.PlayerId,
                    PlayerName = x.Player.Name,
                    PlayerActive = x.Player.Active,
                    PointsScored = x.PointsScored,
                    DatePlayed = x.PlayedGame.DatePlayed,
                    GameDefinitionId = x.PlayedGame.GameDefinitionId,
                    GameName = x.PlayedGame.GameDefinition.Name,
                    PlayedGameId = x.PlayedGameId
                }).ToList()
            });


            queryable = AddSearchCriteria(playedGameFilter, queryable);

            var results = queryable.ToList();

            SortPlayerResultsWithinEachSearchResult(results);

            return(results);
        }