package sorare_utils import ( "context" "git.lehouerou.net/laurent/sorare" "git.lehouerou.net/laurent/sorare/football" "git.lehouerou.net/laurent/sorare/graphql" "github.com/pkg/errors" "github.com/rs/zerolog/log" "github.com/samber/lo" ) func GetGamesFromFixtures( ctx context.Context, s *sorare.Sorare, fixtureSlugs []string, ) ([]football.Game, error) { var games []football.Game for _, slug := range fixtureSlugs { log.Debug().Msgf("getting games for fixture %s...", slug) g, err := s.Football.So5.FixtureGames(slug).Get(ctx, graphql.EmptyParams{}) if err != nil { return nil, errors.Wrapf(err, "getting games for fixture %s", slug) } log.Debug().Msgf("found %d games", len(g)) games = append(games, g...) } log.Debug().Msgf("found total of %d games before filtering", len(games)) games = lo.Filter(games, func(game football.Game, index int) bool { return game.Id.Value != "" }) log.Debug().Msgf("found total of %d games after filtering empty ids", len(games)) games = lo.UniqBy(games, func(game football.Game) string { return game.Id.Value }) log.Debug().Msgf("found total of %d games after filtering duplicate ids", len(games)) return games, nil } func ExtractTeamSlugsFromGames(games []football.Game) []string { var res []string res = lo.Map(games, func(game football.Game, index int) string { return game.AwayTeam.Team.Slug }) res = append(res, lo.Map(games, func(game football.Game, index int) string { return game.HomeTeam.Team.Slug })...) res = lo.Filter(res, func(slug string, index int) bool { return slug != "" }) return lo.Uniq(res) } func ExtractCountrySlugsFromCompetitions(competitions []football.Competition) []string { return lo.Uniq(lo.Filter(lo.Map(competitions, func(competition football.Competition, index int) string { return competition.Country.Slug }), func(slug string, index int) bool { return slug != "" })) } func ExtractCountrySlugsFromTeams(teams []football.Team) []string { return lo.Uniq(lo.Filter(lo.Map(teams, func(team football.Team, index int) string { return team.Country.Slug }), func(slug string, index int) bool { return slug != "" })) } func ExtractCountrySlugsFromCompetitionsClubsAndNationalTeams( competitions []football.Competition, clubs []football.Club, nationalTeams []football.NationalTeam, ) []string { return lo.Uniq(lo.Union( ExtractCountrySlugsFromCompetitions(competitions), ExtractCountrySlugsFromTeams(lo.Map(clubs, func(club football.Club, index int) football.Team { return club.Team })), ExtractCountrySlugsFromTeams( lo.Map(nationalTeams, func(nationalTeam football.NationalTeam, index int) football.Team { return nationalTeam.Team }), ), )) } func ExtractCompetitionSlugsFromGames(games []football.Game) []string { return lo.Uniq(lo.Filter(lo.Map(games, func(game football.Game, index int) string { return game.Competition.Slug }), func(slug string, index int) bool { return slug != "" })) } func ExtractCompetitionSlugsFromClubs(clubs []football.Club) []string { return lo.Uniq(lo.Filter(lo.Map(clubs, func(club football.Club, index int) string { return club.DomesticLeague.Slug }), func(slug string, index int) bool { return slug != "" })) } func ExtractCompetitionSlugsFromGamesAndClubs(games []football.Game, clubs []football.Club) []string { return lo.Uniq(lo.Union( ExtractCompetitionSlugsFromGames(games), ExtractCompetitionSlugsFromClubs(clubs), )) }