Esempio n. 1
0
 public Task <Responses.PagedResponse <TournamentResponseModel> > GetTournaments(GetTournamentsRequestModel model)
 {
     return(_tournamentService.GetPageOfTournaments(model));
 }
Esempio n. 2
0
        public async Task <Responses.PagedResponse <TournamentResponseModel> > GetPageOfTournaments(GetTournamentsRequestModel model)
        {
            var(data, count) = await _database.TournamentQuery()
                               .Filter("t.tournament_type_id = @TypeId", new { TypeId = model.Type }, onlyIf: model.Type.HasValue)
                               .Filter("t.date >= @StartDate", new { StartDate = model.StartDate?.Date }, onlyIf: model.StartDate.HasValue)
                               .Filter("t.date < @EndDate", new { EndDate = model.EndDate?.Date.AddDays(1) }, onlyIf: model.EndDate.HasValue)
                               .OrderBy(model.Sort)
                               .PageAndCountAsync(model.Page, model.PageSize);

            var top3 = (await _database.Top3Query()
                        .Where("fs.tournament_id = ANY(@TournamentIds)", new { TournamentIds = data.Select(t => t.Id).ToArray() })
                        .OrderBy("top3.tournament_id, top3.rank")
                        .AllAsync()).ToLookup(fs => fs.TournamentId);

            foreach (var tournament in data)
            {
                tournament.Top3 = top3.Contains(tournament.Id)
                    ? top3[tournament.Id].ToArray()
                    : new FinalStandingResponseModel[0];
            }

            return(new Responses.PagedResponse <TournamentResponseModel>(data, model.Page, model.PageSize, count));
        }