public async Task <List <FixtureBasic> > GetFixturesBasicAsync(int competitionId, int season)
        {
            try
            {
                if (competitionId < 1)
                {
                    throw new ArgumentException("competitionId must be provided", nameof(competitionId));
                }
                if (season < 1)
                {
                    throw new ArgumentException("season must be provided", nameof(season));
                }

                using (var conn = await _connectionProvider.GetOpenConnectionAsync())
                {
                    var fixtures = await _fixtureRepository.GetFixturesByCompetitionAndSeasonAsync(competitionId, season, conn);

                    var players = await _fixtureRepository.GetFixturePlayersByCompetitionAndSeasonAsync(competitionId, season, conn);

                    var result = new List <FixtureBasic>();

                    foreach (var fixture in fixtures)
                    {
                        var playersForFixture = players.Where(p => p.FixtureId == fixture.FixtureId);

                        var fixtureModel = fixture.ToModel(playersForFixture);
                        fixtureModel.Substitutions = new List <Substitution>();

                        foreach (var player in playersForFixture.Where(p => p.ReplacedBy != null))
                        {
                            fixtureModel.Substitutions.Add(new Substitution
                            {
                                PlayerOut = player.Player.ToModel(),
                                PlayerIn  = player.ReplacedBy.ToModel()
                            });
                        }

                        result.Add(fixtureModel);
                    }

                    return(result);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Unable to get fixtures for competition {0} and season {1}", competitionId, season);
                throw;
            }
        }