public Task <Responses.PagedResponse <TournamentResponseModel> > GetTournaments(GetTournamentsRequestModel model) { return(_tournamentService.GetPageOfTournaments(model)); }
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)); }