initial commit
This commit is contained in:
commit
93af6e9c08
19
.gitignore
vendored
Normal file
19
.gitignore
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Binaries for programs and plugins
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Test binary, built with `go test -c`
|
||||||
|
*.test
|
||||||
|
|
||||||
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Dependency directories (remove the comment below to include it)
|
||||||
|
# vendor/
|
||||||
|
|
||||||
|
# Go workspace file
|
||||||
|
go.work
|
||||||
|
go.work.sum
|
217
cmd/common/init.go
Normal file
217
cmd/common/init.go
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.lehouerou.net/laurent/sorare"
|
||||||
|
"git.lehouerou.net/laurent/sorare/graphql"
|
||||||
|
"github.com/jackc/pgx/v5"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/rs/zerolog"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
|
||||||
|
"git.lehouerou.net/laurent/sorarebuddy/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
func InitParams(cmd *cobra.Command) {
|
||||||
|
cobra.OnInitialize(InitLog)
|
||||||
|
|
||||||
|
viper.AutomaticEnv()
|
||||||
|
viper.SetEnvPrefix("sorare")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().BoolP("verbose", "v", false, "Verbose output")
|
||||||
|
_ = viper.BindPFlag("verbose", cmd.PersistentFlags().Lookup("verbose"))
|
||||||
|
viper.SetDefault("verbose", false)
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("jwttoken", "", "Sorare JWT Token")
|
||||||
|
_ = viper.BindPFlag("jwttoken", cmd.PersistentFlags().Lookup("jwttoken"))
|
||||||
|
viper.SetDefault("jwttoken", "")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("jwtaudience", "", "Sorare JWT Audience")
|
||||||
|
_ = viper.BindPFlag("jwtaudience", cmd.PersistentFlags().Lookup("jwtaudience"))
|
||||||
|
viper.SetDefault("jwtaudience", "")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("email", "", "Sorare Email")
|
||||||
|
_ = viper.BindPFlag("email", cmd.PersistentFlags().Lookup("email"))
|
||||||
|
viper.SetDefault("email", "")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("password", "", "Sorare Password")
|
||||||
|
_ = viper.BindPFlag("password", cmd.PersistentFlags().Lookup("password"))
|
||||||
|
viper.SetDefault("password", "")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("otp", "", "Sorare OTP")
|
||||||
|
_ = viper.BindPFlag("otp", cmd.PersistentFlags().Lookup("otp"))
|
||||||
|
viper.SetDefault("otp", "")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("dbhost", "", "Database Host")
|
||||||
|
_ = viper.BindPFlag("dbhost", cmd.PersistentFlags().Lookup("dbhost"))
|
||||||
|
viper.SetDefault("dbhost", "192.168.1.250")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("dbport", "", "Database Port")
|
||||||
|
_ = viper.BindPFlag("dbport", cmd.PersistentFlags().Lookup("dbport"))
|
||||||
|
viper.SetDefault("dbport", "5436")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("dbuser", "", "Database User")
|
||||||
|
_ = viper.BindPFlag("dbuser", cmd.PersistentFlags().Lookup("dbuser"))
|
||||||
|
viper.SetDefault("dbuser", "sorare")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("dbpass", "", "Database Password")
|
||||||
|
_ = viper.BindPFlag("dbpass", cmd.PersistentFlags().Lookup("dbpass"))
|
||||||
|
viper.SetDefault("dbpass", "sorare")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("dbname", "", "Database Name")
|
||||||
|
_ = viper.BindPFlag("dbname", cmd.PersistentFlags().Lookup("dbname"))
|
||||||
|
viper.SetDefault("dbname", "sorare")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("privatekey", "", "Sorare Private Key")
|
||||||
|
_ = viper.BindPFlag("privatekey", cmd.PersistentFlags().Lookup("privatekey"))
|
||||||
|
viper.SetDefault("privatekey", "")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().Bool("tracedb", false, "Trace Database Queries")
|
||||||
|
_ = viper.BindPFlag("tracedb", cmd.PersistentFlags().Lookup("tracedb"))
|
||||||
|
viper.SetDefault("tracedb", false)
|
||||||
|
|
||||||
|
cmd.PersistentFlags().Bool("tracesorare", false, "Trace Sorare API Calls")
|
||||||
|
_ = viper.BindPFlag("tracesorare", cmd.PersistentFlags().Lookup("tracesorare"))
|
||||||
|
viper.SetDefault("tracesorare", false)
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("cryptkey", "", "Crypt Key")
|
||||||
|
_ = viper.BindPFlag("cryptkey", cmd.PersistentFlags().Lookup("cryptkey"))
|
||||||
|
viper.SetDefault("cryptkey", "")
|
||||||
|
|
||||||
|
cmd.PersistentFlags().String("jwtkey", "", "JWT Key")
|
||||||
|
_ = viper.BindPFlag("jwtkey", cmd.PersistentFlags().Lookup("jwtkey"))
|
||||||
|
viper.SetDefault("jwtkey", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitLog() {
|
||||||
|
log.Logger = zerolog.New(zerolog.ConsoleWriter{
|
||||||
|
Out: os.Stdout,
|
||||||
|
|
||||||
|
TimeFormat: "2006-01-02 | 15:04:05.000",
|
||||||
|
FormatLevel: func(i interface{}) string {
|
||||||
|
return strings.ToUpper(fmt.Sprintf("| %-6s|", i))
|
||||||
|
},
|
||||||
|
FormatFieldName: func(i interface{}) string {
|
||||||
|
return fmt.Sprintf("%s:", i)
|
||||||
|
},
|
||||||
|
FormatFieldValue: func(i interface{}) string {
|
||||||
|
return strings.ToUpper(fmt.Sprintf("%s", i))
|
||||||
|
},
|
||||||
|
}).With().Timestamp().Logger()
|
||||||
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMicro
|
||||||
|
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||||
|
|
||||||
|
verbose := viper.GetBool("verbose")
|
||||||
|
if verbose {
|
||||||
|
log.Info().Msg("Verbose output enabled")
|
||||||
|
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitSorare(ctx context.Context) (*sorare.Sorare, error) {
|
||||||
|
audience := viper.GetString("jwtaudience")
|
||||||
|
if audience == "" {
|
||||||
|
return nil, errors.New("jwtaudience is required")
|
||||||
|
}
|
||||||
|
|
||||||
|
jwttoken := viper.GetString("jwttoken")
|
||||||
|
s := sorare.New()
|
||||||
|
tracesorare := viper.GetBool("tracesorare")
|
||||||
|
if tracesorare {
|
||||||
|
s.Debug()
|
||||||
|
}
|
||||||
|
if jwttoken != "" {
|
||||||
|
s.SetJWTToken(graphql.JwtToken{
|
||||||
|
Token: jwttoken,
|
||||||
|
ExpiredAt: time.Time{},
|
||||||
|
}, audience)
|
||||||
|
} else {
|
||||||
|
email := viper.GetString("email")
|
||||||
|
password := viper.GetString("password")
|
||||||
|
otp := viper.GetString("otp")
|
||||||
|
err := s.Authenticate(ctx, email, password, audience, otp)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "authenticating to sorare")
|
||||||
|
}
|
||||||
|
log.Info().Msgf("authentication to sorare successful. new token: %s", s.GetCurrentToken().Token)
|
||||||
|
}
|
||||||
|
cu, err := s.Users.CurrentUser.Get(ctx, graphql.EmptyParams{})
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "getting current user")
|
||||||
|
}
|
||||||
|
log.Info().Msgf("authenticated on Sorare as %s (%s)", cu.Nickname, cu.Profile.ClubName)
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitDb(ctx context.Context) (*model.Queries, error) {
|
||||||
|
host := viper.GetString("dbhost")
|
||||||
|
if host == "" {
|
||||||
|
return nil, errors.New("dbhost is required")
|
||||||
|
}
|
||||||
|
port := viper.GetString("dbport")
|
||||||
|
if port == "" {
|
||||||
|
return nil, errors.New("dbport is required")
|
||||||
|
}
|
||||||
|
user := viper.GetString("dbuser")
|
||||||
|
if user == "" {
|
||||||
|
return nil, errors.New("dbuser is required")
|
||||||
|
}
|
||||||
|
password := viper.GetString("dbpass")
|
||||||
|
if password == "" {
|
||||||
|
return nil, errors.New("dbpass is required")
|
||||||
|
}
|
||||||
|
dbname := viper.GetString("dbname")
|
||||||
|
if dbname == "" {
|
||||||
|
return nil, errors.New("dbname is required")
|
||||||
|
}
|
||||||
|
|
||||||
|
conn, err := pgx.Connect(
|
||||||
|
ctx,
|
||||||
|
fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable",
|
||||||
|
host,
|
||||||
|
port,
|
||||||
|
user,
|
||||||
|
password,
|
||||||
|
dbname,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "connecting to database")
|
||||||
|
}
|
||||||
|
|
||||||
|
queries := model.New(conn)
|
||||||
|
|
||||||
|
log.Info().Msgf("connected to database %s@%s:%s/%s", user, host, port, dbname)
|
||||||
|
|
||||||
|
return queries, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type contextKey string
|
||||||
|
|
||||||
|
const (
|
||||||
|
SorareContextKey contextKey = "sorare"
|
||||||
|
DbContextKey contextKey = "db"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CmdPreRunE(cmd *cobra.Command, _ []string) error {
|
||||||
|
s, err := InitSorare(cmd.Context())
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "initializing sorare client")
|
||||||
|
}
|
||||||
|
cmd.SetContext(context.WithValue(cmd.Context(), SorareContextKey, s))
|
||||||
|
|
||||||
|
db, err := InitDb(cmd.Context())
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "initializing database")
|
||||||
|
}
|
||||||
|
cmd.SetContext(context.WithValue(cmd.Context(), DbContextKey, db))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
47
cmd/common/main.go
Normal file
47
cmd/common/main.go
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Start(cmd *cobra.Command) {
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
returnCode := make(chan int)
|
||||||
|
terminated := make(chan interface{})
|
||||||
|
go trapSignals(cancel, terminated, returnCode)
|
||||||
|
|
||||||
|
if err := cmd.ExecuteContext(ctx); err != nil {
|
||||||
|
log.Error().Err(err).Send()
|
||||||
|
sendReturnCode(returnCode, -2)
|
||||||
|
} else {
|
||||||
|
sendReturnCode(returnCode, 0)
|
||||||
|
}
|
||||||
|
close(terminated)
|
||||||
|
os.Exit(<-returnCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendReturnCode(returnCode chan<- int, code int) {
|
||||||
|
go func(returnCode chan<- int) { returnCode <- code }(returnCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func trapSignals(cancel context.CancelFunc, terminated chan interface{}, returnCode chan int) {
|
||||||
|
stopSignal := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(stopSignal, syscall.SIGTERM, syscall.SIGINT)
|
||||||
|
<-stopSignal
|
||||||
|
log.Info().Msg("received stop signal. shutting down...")
|
||||||
|
cancel()
|
||||||
|
select {
|
||||||
|
case <-time.After(30 * time.Second):
|
||||||
|
log.Warn().Msg("app shutdown sequence timed out")
|
||||||
|
returnCode <- 1
|
||||||
|
case <-terminated:
|
||||||
|
returnCode <- 0
|
||||||
|
}
|
||||||
|
}
|
281
cmd/console/root.go
Normal file
281
cmd/console/root.go
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.lehouerou.net/laurent/sorare"
|
||||||
|
"git.lehouerou.net/laurent/sorare/football"
|
||||||
|
"git.lehouerou.net/laurent/sorare/graphql"
|
||||||
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/samber/lo"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"git.lehouerou.net/laurent/sorarebuddy/cmd/common"
|
||||||
|
"git.lehouerou.net/laurent/sorarebuddy/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Cmd = &cobra.Command{
|
||||||
|
Use: "console",
|
||||||
|
Short: "console",
|
||||||
|
Long: `console`,
|
||||||
|
RunE: run,
|
||||||
|
PersistentPreRunE: common.CmdPreRunE,
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
common.Start(Cmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
common.InitParams(Cmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
func run(cmd *cobra.Command, _ []string) error {
|
||||||
|
//var wg conc.WaitGroup
|
||||||
|
|
||||||
|
ctx := cmd.Context()
|
||||||
|
s, ok := ctx.Value(common.SorareContextKey).(*sorare.Sorare)
|
||||||
|
if !ok {
|
||||||
|
return errors.New("sorare not found in context")
|
||||||
|
}
|
||||||
|
|
||||||
|
db, ok := ctx.Value(common.DbContextKey).(*model.Queries)
|
||||||
|
if !ok {
|
||||||
|
return errors.New("db not found in context")
|
||||||
|
}
|
||||||
|
|
||||||
|
sfixtures, err := s.Football.So5.So5Fixtures.Get(ctx, football.So5FixturesParams{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Debug().Msgf("fixtures: %v", sfixtures)
|
||||||
|
|
||||||
|
cnt, err := db.CreateFixtures(
|
||||||
|
ctx,
|
||||||
|
lo.Map(sfixtures, func(fixture football.So5Fixture, index int) model.CreateFixturesParams {
|
||||||
|
return model.CreateFixturesParams{
|
||||||
|
Slug: fixture.Slug,
|
||||||
|
DisplayName: fixture.DisplayName,
|
||||||
|
State: fixture.AasmState,
|
||||||
|
StartDate: pgtype.Timestamptz{Time: fixture.StartDate, Valid: true},
|
||||||
|
EndDate: pgtype.Timestamptz{Time: fixture.EndDate, Valid: true},
|
||||||
|
GameWeek: int32(fixture.GameWeek),
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug().Msgf("created %d fixtures", cnt)
|
||||||
|
|
||||||
|
fixtures, err := db.GetAllFixtures(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var games []football.Game
|
||||||
|
for _, fixture := range fixtures {
|
||||||
|
log.Debug().Msgf("fixture: %v", fixture)
|
||||||
|
g, err := s.Football.So5.FixtureGames(fixture.Slug).Get(ctx, graphql.EmptyParams{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Debug().Msgf("games: %d", len(g))
|
||||||
|
games = append(games, g...)
|
||||||
|
}
|
||||||
|
log.Debug().Msgf("games: %d", len(games))
|
||||||
|
|
||||||
|
var teamSlugs []string
|
||||||
|
teamSlugs = lo.Map(games, func(game football.Game, index int) string {
|
||||||
|
return game.AwayTeam.Team.Slug
|
||||||
|
})
|
||||||
|
teamSlugs = append(teamSlugs, lo.Map(games, func(game football.Game, index int) string {
|
||||||
|
return game.HomeTeam.Team.Slug
|
||||||
|
})...)
|
||||||
|
teamSlugs = lo.Filter(teamSlugs, func(slug string, index int) bool {
|
||||||
|
return slug != ""
|
||||||
|
})
|
||||||
|
teamSlugs = lo.Uniq(teamSlugs)
|
||||||
|
|
||||||
|
var clubs []football.Club
|
||||||
|
for _, chunk := range lo.Chunk(teamSlugs, 100) {
|
||||||
|
t, err := s.Football.Clubs.Get(ctx, graphql.SlugsParams{Slugs: chunk})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
clubs = append(clubs, t...)
|
||||||
|
}
|
||||||
|
|
||||||
|
var nationalTeams []football.NationalTeam
|
||||||
|
for _, chunk := range lo.Chunk(lo.Without(teamSlugs, lo.Map(clubs, func(club football.Club, index int) string {
|
||||||
|
return club.Slug
|
||||||
|
})...), 100) {
|
||||||
|
t, err := s.Football.NationalTeams.Get(ctx, graphql.SlugsParams{Slugs: chunk})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
nationalTeams = append(nationalTeams, t...)
|
||||||
|
}
|
||||||
|
|
||||||
|
var teamsToInsert []model.CreateTeamsParams
|
||||||
|
teamsToInsert = append(teamsToInsert, lo.Map(clubs, func(club football.Club, index int) model.CreateTeamsParams {
|
||||||
|
return model.CreateTeamsParams{
|
||||||
|
Slug: club.Slug,
|
||||||
|
DisplayName: club.Name,
|
||||||
|
CountrySlug: club.Country.Slug,
|
||||||
|
DomesticLeagueSlug: func() *string {
|
||||||
|
if club.DomesticLeague.Slug == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &club.DomesticLeague.Slug
|
||||||
|
}(),
|
||||||
|
ShortName: club.ShortName,
|
||||||
|
PictureUrl: club.PictureUrl,
|
||||||
|
TeamType: "club",
|
||||||
|
}
|
||||||
|
})...)
|
||||||
|
teamsToInsert = append(
|
||||||
|
teamsToInsert,
|
||||||
|
lo.Map(nationalTeams, func(nationalTeam football.NationalTeam, index int) model.CreateTeamsParams {
|
||||||
|
return model.CreateTeamsParams{
|
||||||
|
Slug: nationalTeam.Slug,
|
||||||
|
DisplayName: nationalTeam.Name,
|
||||||
|
CountrySlug: nationalTeam.Country.Slug,
|
||||||
|
DomesticLeagueSlug: nil,
|
||||||
|
ShortName: nationalTeam.ShortName,
|
||||||
|
PictureUrl: nationalTeam.PictureUrl,
|
||||||
|
TeamType: "national",
|
||||||
|
}
|
||||||
|
})...)
|
||||||
|
|
||||||
|
competitionSlugs := lo.Map(games, func(game football.Game, index int) string {
|
||||||
|
return game.Competition.Slug
|
||||||
|
})
|
||||||
|
competitionSlugs = append(
|
||||||
|
competitionSlugs,
|
||||||
|
lo.Map(teamsToInsert, func(team model.CreateTeamsParams, index int) string {
|
||||||
|
if team.DomesticLeagueSlug == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return *team.DomesticLeagueSlug
|
||||||
|
})...)
|
||||||
|
competitionSlugs = lo.Filter(competitionSlugs, func(slug string, index int) bool {
|
||||||
|
return slug != ""
|
||||||
|
})
|
||||||
|
competitionSlugs = lo.Uniq(competitionSlugs)
|
||||||
|
|
||||||
|
var competitions []football.Competition
|
||||||
|
for _, slug := range competitionSlugs {
|
||||||
|
log.Debug().Msgf("competition: %s", slug)
|
||||||
|
c, err := s.Football.Competition.Get(ctx, graphql.SlugParams{Slug: slug})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
competitions = append(competitions, c)
|
||||||
|
}
|
||||||
|
|
||||||
|
var countrySlugs []string
|
||||||
|
countrySlugs = append(countrySlugs, lo.Map(teamsToInsert, func(team model.CreateTeamsParams, index int) string {
|
||||||
|
return team.CountrySlug
|
||||||
|
})...)
|
||||||
|
countrySlugs = append(countrySlugs, lo.Map(competitions, func(competition football.Competition, index int) string {
|
||||||
|
return competition.Country.Slug
|
||||||
|
})...)
|
||||||
|
countrySlugs = lo.Filter(countrySlugs, func(slug string, index int) bool {
|
||||||
|
return slug != ""
|
||||||
|
})
|
||||||
|
countrySlugs = lo.Uniq(countrySlugs)
|
||||||
|
|
||||||
|
var countries []sorare.Country
|
||||||
|
for _, chunk := range lo.Chunk(countrySlugs, 100) {
|
||||||
|
c, err := s.Countries.Get(ctx, graphql.SlugsParams{Slugs: chunk})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
countries = append(countries, c...)
|
||||||
|
}
|
||||||
|
|
||||||
|
cnt, err = db.CreateCountries(
|
||||||
|
ctx,
|
||||||
|
lo.Map(countries, func(country sorare.Country, index int) model.CreateCountriesParams {
|
||||||
|
return model.CreateCountriesParams{
|
||||||
|
Slug: country.Slug,
|
||||||
|
Code: country.Code,
|
||||||
|
DisplayName: country.Name,
|
||||||
|
ThreeLetterCode: country.ThreeLetterCode,
|
||||||
|
FlagFlat64Url: country.FlagFlat64Url,
|
||||||
|
FlagFlat32Url: country.FlagFlat32Url,
|
||||||
|
FlagRound64Url: country.FlagRound64Url,
|
||||||
|
FlagRound32Url: country.FlagRound32Url,
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Debug().Msgf("created %d countries", cnt)
|
||||||
|
|
||||||
|
log.Debug().Msgf("competitions: %d", len(competitions))
|
||||||
|
for _, competition := range competitions {
|
||||||
|
|
||||||
|
err := db.CreateOrUpdateCompetition(ctx, model.CreateOrUpdateCompetitionParams{
|
||||||
|
Slug: competition.Slug,
|
||||||
|
CompetitionFormat: competition.Format,
|
||||||
|
CompetitionType: competition.Type,
|
||||||
|
DisplayName: competition.DisplayName,
|
||||||
|
PictureUrl: competition.PictureUrl,
|
||||||
|
LogoUrl: competition.LogoUrl,
|
||||||
|
CountrySlug: competition.Country.Slug,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cnt, err = db.CreateTeams(ctx, teamsToInsert)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Debug().Msgf("created %d teams", cnt)
|
||||||
|
|
||||||
|
cnt, err = db.CreateGames(ctx, lo.Map(games, func(game football.Game, index int) model.CreateGamesParams {
|
||||||
|
return model.CreateGamesParams{
|
||||||
|
CoverageStatus: game.CoverageStatus,
|
||||||
|
LowCoverage: game.LowCoverage,
|
||||||
|
Minutes: int32(game.Minute),
|
||||||
|
PeriodType: game.PeriodType,
|
||||||
|
Scored: game.Scored,
|
||||||
|
Status: game.Status,
|
||||||
|
CompetitionSlug: game.Competition.Slug,
|
||||||
|
FixtureSlug: game.So5Fixture.Slug,
|
||||||
|
AwayTeamSlug: game.AwayTeam.Team.Slug,
|
||||||
|
AwayGoals: int32(game.AwayGoals),
|
||||||
|
AwayExtraTimeScore: int32(game.ExtraTimeScoreAway),
|
||||||
|
AwayPenaltyScore: int32(game.PenaltyScoreAway),
|
||||||
|
HomeTeamSlug: game.HomeTeam.Team.Slug,
|
||||||
|
HomeGoals: int32(game.HomeGoals),
|
||||||
|
HomeExtraTimeScore: int32(game.ExtraTimeScoreHome),
|
||||||
|
HomePenaltyScore: int32(game.PenaltyScoreHome),
|
||||||
|
WinnerTeamSlug: func() *string {
|
||||||
|
if game.Winner.Team.Slug == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &game.Winner.Team.Slug
|
||||||
|
}(),
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug().Msgf("created %d games", cnt)
|
||||||
|
|
||||||
|
// log.Debug().Msg("start sequence completed. waiting for shutdown request")
|
||||||
|
// <-ctx.Done()
|
||||||
|
// log.Debug().Msg("shutdown requested")
|
||||||
|
// wg.Wait()
|
||||||
|
// log.Debug().Msg("shutdown complete")
|
||||||
|
return nil
|
||||||
|
|
||||||
|
}
|
205
db/migrations/00001_init.sql
Normal file
205
db/migrations/00001_init.sql
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
-- +goose Up
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS zones (id SERIAL PRIMARY KEY, display_name TEXT NOT NULL);
|
||||||
|
|
||||||
|
INSERT INTO zones (display_name)
|
||||||
|
VALUES ('Champions');
|
||||||
|
|
||||||
|
INSERT INTO zones (display_name)
|
||||||
|
VALUES ('Contenders');
|
||||||
|
|
||||||
|
INSERT INTO zones (display_name)
|
||||||
|
VALUES ('Challengers');
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS countries (
|
||||||
|
slug TEXT PRIMARY KEY,
|
||||||
|
code TEXT NOT NULL,
|
||||||
|
display_name TEXT NOT NULL,
|
||||||
|
three_letter_code TEXT NOT NULL,
|
||||||
|
flag_flat_64_url TEXT NOT NULL,
|
||||||
|
flag_flat_32_url TEXT NOT NULL,
|
||||||
|
flag_round_64_url TEXT NOT NULL,
|
||||||
|
flag_round_32_url TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS competitions (
|
||||||
|
slug TEXT PRIMARY KEY,
|
||||||
|
display_name TEXT NOT NULL,
|
||||||
|
country_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (country_slug) REFERENCES countries (slug),
|
||||||
|
competition_format TEXT NOT NULL,
|
||||||
|
competition_type TEXT NOT NULL,
|
||||||
|
picture_url TEXT NOT NULL,
|
||||||
|
logo_url TEXT NOT NULL,
|
||||||
|
zone_id INTEGER,
|
||||||
|
FOREIGN KEY (zone_id) REFERENCES zones (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS fixtures (
|
||||||
|
slug TEXT PRIMARY KEY,
|
||||||
|
display_name TEXT NOT NULL,
|
||||||
|
state TEXT NOT NULL,
|
||||||
|
start_date TIMESTAMPTZ NOT NULL,
|
||||||
|
end_date TIMESTAMPTZ NOT NULL,
|
||||||
|
game_week INTEGER NOT NULL UNIQUE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS teams (
|
||||||
|
slug TEXT PRIMARY KEY,
|
||||||
|
display_name TEXT NOT NULL,
|
||||||
|
country_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (country_slug) REFERENCES countries (slug),
|
||||||
|
domestic_league_slug TEXT,
|
||||||
|
FOREIGN KEY (domestic_league_slug) REFERENCES competitions (slug),
|
||||||
|
short_name TEXT NOT NULL,
|
||||||
|
picture_url TEXT NOT NULL,
|
||||||
|
team_type TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS games (
|
||||||
|
id TEXT PRIMARY KEY,
|
||||||
|
date TIMESTAMPTZ,
|
||||||
|
coverage_status TEXT NOT NULL,
|
||||||
|
low_coverage BOOLEAN NOT NULL,
|
||||||
|
minutes INTEGER NOT NULL,
|
||||||
|
period_type TEXT NOT NULL,
|
||||||
|
scored BOOLEAN NOT NULL,
|
||||||
|
status TEXT NOT NULL,
|
||||||
|
competition_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (competition_slug) REFERENCES competitions (slug),
|
||||||
|
fixture_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (fixture_slug) REFERENCES fixtures (slug),
|
||||||
|
away_team_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (away_team_slug) REFERENCES teams (slug),
|
||||||
|
away_goals INTEGER NOT NULL,
|
||||||
|
away_extra_time_score INTEGER NOT NULL,
|
||||||
|
away_penalty_score INTEGER NOT NULL,
|
||||||
|
home_team_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (home_team_slug) REFERENCES teams (slug),
|
||||||
|
home_goals INTEGER NOT NULL,
|
||||||
|
home_extra_time_score INTEGER NOT NULL,
|
||||||
|
home_penalty_score INTEGER NOT NULL,
|
||||||
|
winner_team_slug TEXT,
|
||||||
|
FOREIGN KEY (winner_team_slug) REFERENCES teams (slug)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS players (
|
||||||
|
slug TEXT PRIMARY KEY,
|
||||||
|
display_name TEXT NOT NULL,
|
||||||
|
birth_date DATE NOT NULL,
|
||||||
|
country_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (country_slug) REFERENCES countries (slug),
|
||||||
|
team_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (team_slug) REFERENCES teams (slug),
|
||||||
|
domestic_league_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (domestic_league_slug) REFERENCES competitions (slug),
|
||||||
|
avatar_url TEXT NOT NULL,
|
||||||
|
field_position TEXT NOT NULL,
|
||||||
|
status TEXT NOT NULL,
|
||||||
|
shirt_number INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS game_players (
|
||||||
|
game_id TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (game_id) REFERENCES games (id),
|
||||||
|
player_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (player_slug) REFERENCES players (slug),
|
||||||
|
status TEXT NOT NULL,
|
||||||
|
team_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (team_slug) REFERENCES teams (slug),
|
||||||
|
PRIMARY KEY (game_id, player_slug)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX idx_game_players_game_id_team_slug ON game_players (game_id, team_slug);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS game_player_scores (
|
||||||
|
game_id TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (game_id) REFERENCES games (id),
|
||||||
|
player_slug TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (player_slug) REFERENCES players (slug),
|
||||||
|
FOREIGN KEY (game_id, player_slug) REFERENCES game_players (game_id, player_slug),
|
||||||
|
PRIMARY KEY (game_id, player_slug),
|
||||||
|
score NUMERIC NOT NULL,
|
||||||
|
decisive_score NUMERIC NOT NULL,
|
||||||
|
all_around_score NUMERIC NOT NULL,
|
||||||
|
minutes_played INTEGER NOT NULL,
|
||||||
|
game_started BOOLEAN NOT NULL,
|
||||||
|
formation_place INTEGER NOT NULL,
|
||||||
|
live BOOLEAN NOT NULL,
|
||||||
|
on_game_sheet BOOLEAN NOT NULL,
|
||||||
|
reviewed BOOLEAN NOT NULL,
|
||||||
|
goal INTEGER NOT NULL,
|
||||||
|
assist INTEGER NOT NULL,
|
||||||
|
penalty_won INTEGER NOT NULL,
|
||||||
|
clearance_off_line INTEGER NOT NULL,
|
||||||
|
last_man_tackle INTEGER NOT NULL,
|
||||||
|
penalty_save INTEGER NOT NULL,
|
||||||
|
own_goal INTEGER NOT NULL,
|
||||||
|
red_card BOOLEAN NOT NULL,
|
||||||
|
error_lead_to_goal INTEGER NOT NULL,
|
||||||
|
penalty_conceded INTEGER NOT NULL,
|
||||||
|
yellow_card INTEGER NOT NULL,
|
||||||
|
fouls INTEGER NOT NULL,
|
||||||
|
fouled INTEGER NOT NULL,
|
||||||
|
clean_sheet BOOLEAN NOT NULL,
|
||||||
|
double_double BOOLEAN NOT NULL,
|
||||||
|
triple_double BOOLEAN NOT NULL,
|
||||||
|
triple_triple BOOLEAN NOT NULL,
|
||||||
|
error_lead_to_shot INTEGER NOT NULL,
|
||||||
|
saves INTEGER NOT NULL,
|
||||||
|
saved_shot_from_inside_box INTEGER NOT NULL,
|
||||||
|
good_high_claim INTEGER NOT NULL,
|
||||||
|
punches INTEGER NOT NULL,
|
||||||
|
diving_save INTEGER NOT NULL,
|
||||||
|
diving_catch INTEGER NOT NULL,
|
||||||
|
cross_not_claimed INTEGER NOT NULL,
|
||||||
|
goalkeeper_smother INTEGER NOT NULL,
|
||||||
|
six_second_violation INTEGER NOT NULL,
|
||||||
|
keeper_sweeper INTEGER NOT NULL,
|
||||||
|
goals_conceded INTEGER NOT NULL,
|
||||||
|
effective_clearance INTEGER NOT NULL,
|
||||||
|
won_tackle INTEGER NOT NULL,
|
||||||
|
blocked_cross INTEGER NOT NULL,
|
||||||
|
block INTEGER NOT NULL,
|
||||||
|
possession_lost INTEGER NOT NULL,
|
||||||
|
possession_won INTEGER NOT NULL,
|
||||||
|
duel_lost INTEGER NOT NULL,
|
||||||
|
duel_won INTEGER NOT NULL,
|
||||||
|
interception INTEGER NOT NULL,
|
||||||
|
accurate_pass INTEGER NOT NULL,
|
||||||
|
accurate_final_third_pass INTEGER NOT NULL,
|
||||||
|
accurate_long_ball INTEGER NOT NULL,
|
||||||
|
long_pass_into_opposition INTEGER NOT NULL,
|
||||||
|
missed_pass INTEGER NOT NULL,
|
||||||
|
shot_on_target INTEGER NOT NULL,
|
||||||
|
won_contest INTEGER NOT NULL,
|
||||||
|
big_chance_created INTEGER NOT NULL,
|
||||||
|
attempted_assist INTEGER NOT NULL,
|
||||||
|
penalty_area_entries INTEGER NOT NULL,
|
||||||
|
penalty_kick_missed INTEGER NOT NULL,
|
||||||
|
big_chance_missed INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
-- +goose Down
|
||||||
|
DROP TABLE IF EXISTS game_player_scores;
|
||||||
|
|
||||||
|
DROP INDEX IF EXISTS idx_game_players_game_id_team_slug;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS game_players;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS players;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS games;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS teams;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS fixtures;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS competitions;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS countries;
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS zones;
|
55
go.mod
Normal file
55
go.mod
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
module git.lehouerou.net/laurent/sorarebuddy
|
||||||
|
|
||||||
|
go 1.22.1
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/jackc/pgx/v5 v5.5.5
|
||||||
|
github.com/shopspring/decimal v1.3.1
|
||||||
|
github.com/spf13/cobra v1.8.0
|
||||||
|
github.com/spf13/viper v1.18.2
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||||
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
github.com/gorilla/websocket v1.5.1 // indirect
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
|
||||||
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
|
github.com/klauspost/compress v1.17.0 // indirect
|
||||||
|
github.com/llehouerou/go-graphql-client v0.9.6 // indirect
|
||||||
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||||
|
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||||
|
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||||
|
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||||
|
github.com/spf13/afero v1.11.0 // indirect
|
||||||
|
github.com/spf13/cast v1.6.0 // indirect
|
||||||
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
|
github.com/subosito/gotenv v1.6.0 // indirect
|
||||||
|
github.com/xlzd/gotp v0.1.0 // indirect
|
||||||
|
go.uber.org/atomic v1.9.0 // indirect
|
||||||
|
go.uber.org/multierr v1.9.0 // indirect
|
||||||
|
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
|
||||||
|
golang.org/x/net v0.21.0 // indirect
|
||||||
|
golang.org/x/sys v0.18.0 // indirect
|
||||||
|
golang.org/x/time v0.5.0 // indirect
|
||||||
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
nhooyr.io/websocket v1.8.7 // indirect
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
git.lehouerou.net/laurent/sorare v0.0.0-20240308104821-b99d85580526
|
||||||
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 // indirect
|
||||||
|
github.com/pkg/errors v0.9.1
|
||||||
|
github.com/rs/zerolog v1.32.0
|
||||||
|
github.com/samber/lo v1.39.0
|
||||||
|
golang.org/x/crypto v0.21.0 // indirect
|
||||||
|
golang.org/x/text v0.14.0 // indirect
|
||||||
|
)
|
191
go.sum
Normal file
191
go.sum
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
git.lehouerou.net/laurent/sorare v0.0.0-20240308104821-b99d85580526 h1:/qgeHqVliEYKynyyDEnS45e6I8uS7bAFkw1ucpQ3D8I=
|
||||||
|
git.lehouerou.net/laurent/sorare v0.0.0-20240308104821-b99d85580526/go.mod h1:s/kVH8wu+esjAd1Zw+8+UGovg5hVClZp+9lFu7ZXsbI=
|
||||||
|
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
|
||||||
|
github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
|
||||||
|
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||||
|
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||||
|
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||||
|
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||||
|
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||||
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
|
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
|
||||||
|
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
|
||||||
|
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
|
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
|
||||||
|
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
|
||||||
|
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
|
||||||
|
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||||
|
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
|
||||||
|
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
|
||||||
|
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
|
||||||
|
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
|
||||||
|
github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
|
||||||
|
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
|
||||||
|
github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
|
||||||
|
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
|
||||||
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
|
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
|
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
|
||||||
|
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||||
|
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||||
|
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
|
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
|
||||||
|
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
|
||||||
|
github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMNMPSVXA1yc=
|
||||||
|
github.com/graph-gophers/graphql-go v1.5.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os=
|
||||||
|
github.com/graph-gophers/graphql-transport-ws v0.0.2 h1:DbmSkbIGzj8SvHei6n8Mh9eLQin8PtA8xY9eCzjRpvo=
|
||||||
|
github.com/graph-gophers/graphql-transport-ws v0.0.2/go.mod h1:5BVKvFzOd2BalVIBFfnfmHjpJi/MZ5rOj8G55mXvZ8g=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
||||||
|
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
||||||
|
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
|
||||||
|
github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c=
|
||||||
|
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
|
||||||
|
github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
|
||||||
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
|
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
|
||||||
|
github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
|
||||||
|
github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
|
||||||
|
github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
|
||||||
|
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
|
||||||
|
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
|
||||||
|
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
|
github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
|
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
|
||||||
|
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||||
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
|
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
|
||||||
|
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
|
||||||
|
github.com/llehouerou/go-graphql-client v0.9.6 h1:tZdCHrBz8p044KoxXwmEur9L4VNZ3luYeJmQZpLodPY=
|
||||||
|
github.com/llehouerou/go-graphql-client v0.9.6/go.mod h1:hyvnfe3diGLxMelSKF+cFPyAfxZLa1CGGBogmix4SyM=
|
||||||
|
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
|
||||||
|
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||||
|
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||||
|
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
|
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
||||||
|
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
|
||||||
|
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
|
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
|
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||||
|
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||||
|
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
|
||||||
|
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
|
||||||
|
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
|
||||||
|
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||||
|
github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0=
|
||||||
|
github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
|
||||||
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
|
||||||
|
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
|
||||||
|
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
|
||||||
|
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
||||||
|
github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
|
||||||
|
github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
|
||||||
|
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
|
||||||
|
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||||
|
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
|
||||||
|
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
|
||||||
|
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
|
||||||
|
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
|
||||||
|
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
|
||||||
|
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||||
|
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
|
||||||
|
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
|
||||||
|
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||||
|
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
|
github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
|
||||||
|
github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||||
|
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
|
||||||
|
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
|
||||||
|
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
||||||
|
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||||
|
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||||
|
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||||
|
github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po=
|
||||||
|
github.com/xlzd/gotp v0.1.0/go.mod h1:ndLJ3JKzi3xLmUProq4LLxCuECL93dG9WASNLpHz8qg=
|
||||||
|
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||||
|
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
|
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
|
||||||
|
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
|
||||||
|
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
|
||||||
|
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
||||||
|
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
|
||||||
|
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
|
||||||
|
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
|
||||||
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
|
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
||||||
|
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||||
|
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
|
||||||
|
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
||||||
|
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
|
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||||
|
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||||
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g=
|
||||||
|
nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0=
|
151
model/competition.sql.go
Normal file
151
model/competition.sql.go
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
// source: competition.sql
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
const createOrUpdateCompetition = `-- name: CreateOrUpdateCompetition :exec
|
||||||
|
INSERT INTO competitions (
|
||||||
|
slug,
|
||||||
|
display_name,
|
||||||
|
country_slug,
|
||||||
|
competition_format,
|
||||||
|
competition_type,
|
||||||
|
picture_url,
|
||||||
|
logo_url
|
||||||
|
)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7) ON CONFLICT (slug)
|
||||||
|
DO
|
||||||
|
UPDATE
|
||||||
|
SET display_name = EXCLUDED.display_name,
|
||||||
|
competition_format = EXCLUDED.competition_format,
|
||||||
|
competition_type = EXCLUDED.competition_type,
|
||||||
|
picture_url = EXCLUDED.picture_url,
|
||||||
|
logo_url = EXCLUDED.logo_url,
|
||||||
|
country_slug = EXCLUDED.country_slug
|
||||||
|
`
|
||||||
|
|
||||||
|
type CreateOrUpdateCompetitionParams struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
CountrySlug string
|
||||||
|
CompetitionFormat string
|
||||||
|
CompetitionType string
|
||||||
|
PictureUrl string
|
||||||
|
LogoUrl string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Active: 1709890109198@@192.168.1.250@5436@sorare
|
||||||
|
func (q *Queries) CreateOrUpdateCompetition(ctx context.Context, arg CreateOrUpdateCompetitionParams) error {
|
||||||
|
_, err := q.db.Exec(ctx, createOrUpdateCompetition,
|
||||||
|
arg.Slug,
|
||||||
|
arg.DisplayName,
|
||||||
|
arg.CountrySlug,
|
||||||
|
arg.CompetitionFormat,
|
||||||
|
arg.CompetitionType,
|
||||||
|
arg.PictureUrl,
|
||||||
|
arg.LogoUrl,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAllCompetitions = `-- name: GetAllCompetitions :many
|
||||||
|
SELECT competitions.slug, competitions.display_name, competitions.country_slug, competitions.competition_format, competitions.competition_type, competitions.picture_url, competitions.logo_url, competitions.zone_id,
|
||||||
|
zones.id, zones.display_name,
|
||||||
|
countries.slug, countries.code, countries.display_name, countries.three_letter_code, countries.flag_flat_64_url, countries.flag_flat_32_url, countries.flag_round_64_url, countries.flag_round_32_url
|
||||||
|
FROM competitions
|
||||||
|
LEFT JOIN zones ON competitions.zone_id = zones.id
|
||||||
|
LEFT JOIN countries ON competitions.country_slug = countries.slug
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetAllCompetitionsRow struct {
|
||||||
|
Competition Competition
|
||||||
|
Zone Zone
|
||||||
|
Country Country
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetAllCompetitions(ctx context.Context) ([]GetAllCompetitionsRow, error) {
|
||||||
|
rows, err := q.db.Query(ctx, getAllCompetitions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []GetAllCompetitionsRow
|
||||||
|
for rows.Next() {
|
||||||
|
var i GetAllCompetitionsRow
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.Competition.Slug,
|
||||||
|
&i.Competition.DisplayName,
|
||||||
|
&i.Competition.CountrySlug,
|
||||||
|
&i.Competition.CompetitionFormat,
|
||||||
|
&i.Competition.CompetitionType,
|
||||||
|
&i.Competition.PictureUrl,
|
||||||
|
&i.Competition.LogoUrl,
|
||||||
|
&i.Competition.ZoneID,
|
||||||
|
&i.Zone.ID,
|
||||||
|
&i.Zone.DisplayName,
|
||||||
|
&i.Country.Slug,
|
||||||
|
&i.Country.Code,
|
||||||
|
&i.Country.DisplayName,
|
||||||
|
&i.Country.ThreeLetterCode,
|
||||||
|
&i.Country.FlagFlat64Url,
|
||||||
|
&i.Country.FlagFlat32Url,
|
||||||
|
&i.Country.FlagRound64Url,
|
||||||
|
&i.Country.FlagRound32Url,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const getCompetitionBySlug = `-- name: GetCompetitionBySlug :one
|
||||||
|
SELECT competitions.slug, competitions.display_name, competitions.country_slug, competitions.competition_format, competitions.competition_type, competitions.picture_url, competitions.logo_url, competitions.zone_id,
|
||||||
|
zones.id, zones.display_name,
|
||||||
|
countries.slug, countries.code, countries.display_name, countries.three_letter_code, countries.flag_flat_64_url, countries.flag_flat_32_url, countries.flag_round_64_url, countries.flag_round_32_url
|
||||||
|
FROM competitions
|
||||||
|
LEFT JOIN zones ON competitions.zone_id = zones.id
|
||||||
|
LEFT JOIN countries ON competitions.country_slug = countries.slug
|
||||||
|
WHERE competitions.slug = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
type GetCompetitionBySlugRow struct {
|
||||||
|
Competition Competition
|
||||||
|
Zone Zone
|
||||||
|
Country Country
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetCompetitionBySlug(ctx context.Context, slug string) (GetCompetitionBySlugRow, error) {
|
||||||
|
row := q.db.QueryRow(ctx, getCompetitionBySlug, slug)
|
||||||
|
var i GetCompetitionBySlugRow
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Competition.Slug,
|
||||||
|
&i.Competition.DisplayName,
|
||||||
|
&i.Competition.CountrySlug,
|
||||||
|
&i.Competition.CompetitionFormat,
|
||||||
|
&i.Competition.CompetitionType,
|
||||||
|
&i.Competition.PictureUrl,
|
||||||
|
&i.Competition.LogoUrl,
|
||||||
|
&i.Competition.ZoneID,
|
||||||
|
&i.Zone.ID,
|
||||||
|
&i.Zone.DisplayName,
|
||||||
|
&i.Country.Slug,
|
||||||
|
&i.Country.Code,
|
||||||
|
&i.Country.DisplayName,
|
||||||
|
&i.Country.ThreeLetterCode,
|
||||||
|
&i.Country.FlagFlat64Url,
|
||||||
|
&i.Country.FlagFlat32Url,
|
||||||
|
&i.Country.FlagRound64Url,
|
||||||
|
&i.Country.FlagRound32Url,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
175
model/copyfrom.go
Normal file
175
model/copyfrom.go
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
// source: copyfrom.go
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
// iteratorForCreateCountries implements pgx.CopyFromSource.
|
||||||
|
type iteratorForCreateCountries struct {
|
||||||
|
rows []CreateCountriesParams
|
||||||
|
skippedFirstNextCall bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *iteratorForCreateCountries) Next() bool {
|
||||||
|
if len(r.rows) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !r.skippedFirstNextCall {
|
||||||
|
r.skippedFirstNextCall = true
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
r.rows = r.rows[1:]
|
||||||
|
return len(r.rows) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateCountries) Values() ([]interface{}, error) {
|
||||||
|
return []interface{}{
|
||||||
|
r.rows[0].Slug,
|
||||||
|
r.rows[0].Code,
|
||||||
|
r.rows[0].DisplayName,
|
||||||
|
r.rows[0].ThreeLetterCode,
|
||||||
|
r.rows[0].FlagFlat64Url,
|
||||||
|
r.rows[0].FlagFlat32Url,
|
||||||
|
r.rows[0].FlagRound64Url,
|
||||||
|
r.rows[0].FlagRound32Url,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateCountries) Err() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateCountries(ctx context.Context, arg []CreateCountriesParams) (int64, error) {
|
||||||
|
return q.db.CopyFrom(ctx, []string{"countries"}, []string{"slug", "code", "display_name", "three_letter_code", "flag_flat_64_url", "flag_flat_32_url", "flag_round_64_url", "flag_round_32_url"}, &iteratorForCreateCountries{rows: arg})
|
||||||
|
}
|
||||||
|
|
||||||
|
// iteratorForCreateFixtures implements pgx.CopyFromSource.
|
||||||
|
type iteratorForCreateFixtures struct {
|
||||||
|
rows []CreateFixturesParams
|
||||||
|
skippedFirstNextCall bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *iteratorForCreateFixtures) Next() bool {
|
||||||
|
if len(r.rows) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !r.skippedFirstNextCall {
|
||||||
|
r.skippedFirstNextCall = true
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
r.rows = r.rows[1:]
|
||||||
|
return len(r.rows) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateFixtures) Values() ([]interface{}, error) {
|
||||||
|
return []interface{}{
|
||||||
|
r.rows[0].Slug,
|
||||||
|
r.rows[0].DisplayName,
|
||||||
|
r.rows[0].State,
|
||||||
|
r.rows[0].StartDate,
|
||||||
|
r.rows[0].EndDate,
|
||||||
|
r.rows[0].GameWeek,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateFixtures) Err() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Active: 1709890109198@@192.168.1.250@5436@sorare
|
||||||
|
func (q *Queries) CreateFixtures(ctx context.Context, arg []CreateFixturesParams) (int64, error) {
|
||||||
|
return q.db.CopyFrom(ctx, []string{"fixtures"}, []string{"slug", "display_name", "state", "start_date", "end_date", "game_week"}, &iteratorForCreateFixtures{rows: arg})
|
||||||
|
}
|
||||||
|
|
||||||
|
// iteratorForCreateGames implements pgx.CopyFromSource.
|
||||||
|
type iteratorForCreateGames struct {
|
||||||
|
rows []CreateGamesParams
|
||||||
|
skippedFirstNextCall bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *iteratorForCreateGames) Next() bool {
|
||||||
|
if len(r.rows) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !r.skippedFirstNextCall {
|
||||||
|
r.skippedFirstNextCall = true
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
r.rows = r.rows[1:]
|
||||||
|
return len(r.rows) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateGames) Values() ([]interface{}, error) {
|
||||||
|
return []interface{}{
|
||||||
|
r.rows[0].ID,
|
||||||
|
r.rows[0].Date,
|
||||||
|
r.rows[0].CoverageStatus,
|
||||||
|
r.rows[0].LowCoverage,
|
||||||
|
r.rows[0].Minutes,
|
||||||
|
r.rows[0].PeriodType,
|
||||||
|
r.rows[0].Scored,
|
||||||
|
r.rows[0].Status,
|
||||||
|
r.rows[0].CompetitionSlug,
|
||||||
|
r.rows[0].FixtureSlug,
|
||||||
|
r.rows[0].AwayTeamSlug,
|
||||||
|
r.rows[0].AwayGoals,
|
||||||
|
r.rows[0].AwayExtraTimeScore,
|
||||||
|
r.rows[0].AwayPenaltyScore,
|
||||||
|
r.rows[0].HomeTeamSlug,
|
||||||
|
r.rows[0].HomeGoals,
|
||||||
|
r.rows[0].HomeExtraTimeScore,
|
||||||
|
r.rows[0].HomePenaltyScore,
|
||||||
|
r.rows[0].WinnerTeamSlug,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateGames) Err() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateGames(ctx context.Context, arg []CreateGamesParams) (int64, error) {
|
||||||
|
return q.db.CopyFrom(ctx, []string{"games"}, []string{"id", "date", "coverage_status", "low_coverage", "minutes", "period_type", "scored", "status", "competition_slug", "fixture_slug", "away_team_slug", "away_goals", "away_extra_time_score", "away_penalty_score", "home_team_slug", "home_goals", "home_extra_time_score", "home_penalty_score", "winner_team_slug"}, &iteratorForCreateGames{rows: arg})
|
||||||
|
}
|
||||||
|
|
||||||
|
// iteratorForCreateTeams implements pgx.CopyFromSource.
|
||||||
|
type iteratorForCreateTeams struct {
|
||||||
|
rows []CreateTeamsParams
|
||||||
|
skippedFirstNextCall bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *iteratorForCreateTeams) Next() bool {
|
||||||
|
if len(r.rows) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if !r.skippedFirstNextCall {
|
||||||
|
r.skippedFirstNextCall = true
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
r.rows = r.rows[1:]
|
||||||
|
return len(r.rows) > 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateTeams) Values() ([]interface{}, error) {
|
||||||
|
return []interface{}{
|
||||||
|
r.rows[0].Slug,
|
||||||
|
r.rows[0].DisplayName,
|
||||||
|
r.rows[0].CountrySlug,
|
||||||
|
r.rows[0].DomesticLeagueSlug,
|
||||||
|
r.rows[0].ShortName,
|
||||||
|
r.rows[0].PictureUrl,
|
||||||
|
r.rows[0].TeamType,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r iteratorForCreateTeams) Err() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateTeams(ctx context.Context, arg []CreateTeamsParams) (int64, error) {
|
||||||
|
return q.db.CopyFrom(ctx, []string{"teams"}, []string{"slug", "display_name", "country_slug", "domestic_league_slug", "short_name", "picture_url", "team_type"}, &iteratorForCreateTeams{rows: arg})
|
||||||
|
}
|
69
model/country.sql.go
Normal file
69
model/country.sql.go
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
// source: country.sql
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CreateCountriesParams struct {
|
||||||
|
Slug string
|
||||||
|
Code string
|
||||||
|
DisplayName string
|
||||||
|
ThreeLetterCode string
|
||||||
|
FlagFlat64Url string
|
||||||
|
FlagFlat32Url string
|
||||||
|
FlagRound64Url string
|
||||||
|
FlagRound32Url string
|
||||||
|
}
|
||||||
|
|
||||||
|
const createOrUpdateCountry = `-- name: CreateOrUpdateCountry :exec
|
||||||
|
INSERT INTO countries (
|
||||||
|
slug,
|
||||||
|
code,
|
||||||
|
display_name,
|
||||||
|
three_letter_code,
|
||||||
|
flag_flat_64_url,
|
||||||
|
flag_flat_32_url,
|
||||||
|
flag_round_64_url,
|
||||||
|
flag_round_32_url
|
||||||
|
)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8) ON CONFLICT (slug)
|
||||||
|
DO
|
||||||
|
UPDATE
|
||||||
|
SET code = EXCLUDED.code,
|
||||||
|
display_name = EXCLUDED.display_name,
|
||||||
|
three_letter_code = EXCLUDED.three_letter_code,
|
||||||
|
flag_flat_64_url = EXCLUDED.flag_flat_64_url,
|
||||||
|
flag_flat_32_url = EXCLUDED.flag_flat_32_url,
|
||||||
|
flag_round_64_url = EXCLUDED.flag_round_64_url,
|
||||||
|
flag_round_32_url = EXCLUDED.flag_round_32_url
|
||||||
|
`
|
||||||
|
|
||||||
|
type CreateOrUpdateCountryParams struct {
|
||||||
|
Slug string
|
||||||
|
Code string
|
||||||
|
DisplayName string
|
||||||
|
ThreeLetterCode string
|
||||||
|
FlagFlat64Url string
|
||||||
|
FlagFlat32Url string
|
||||||
|
FlagRound64Url string
|
||||||
|
FlagRound32Url string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateOrUpdateCountry(ctx context.Context, arg CreateOrUpdateCountryParams) error {
|
||||||
|
_, err := q.db.Exec(ctx, createOrUpdateCountry,
|
||||||
|
arg.Slug,
|
||||||
|
arg.Code,
|
||||||
|
arg.DisplayName,
|
||||||
|
arg.ThreeLetterCode,
|
||||||
|
arg.FlagFlat64Url,
|
||||||
|
arg.FlagFlat32Url,
|
||||||
|
arg.FlagRound64Url,
|
||||||
|
arg.FlagRound32Url,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
33
model/db.go
Normal file
33
model/db.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/jackc/pgx/v5"
|
||||||
|
"github.com/jackc/pgx/v5/pgconn"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DBTX interface {
|
||||||
|
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
|
||||||
|
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
|
||||||
|
QueryRow(context.Context, string, ...interface{}) pgx.Row
|
||||||
|
CopyFrom(ctx context.Context, tableName pgx.Identifier, columnNames []string, rowSrc pgx.CopyFromSource) (int64, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(db DBTX) *Queries {
|
||||||
|
return &Queries{db: db}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Queries struct {
|
||||||
|
db DBTX
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) WithTx(tx pgx.Tx) *Queries {
|
||||||
|
return &Queries{
|
||||||
|
db: tx,
|
||||||
|
}
|
||||||
|
}
|
116
model/fixture.sql.go
Normal file
116
model/fixture.sql.go
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
// source: fixture.sql
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CreateFixturesParams struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
State string
|
||||||
|
StartDate pgtype.Timestamptz
|
||||||
|
EndDate pgtype.Timestamptz
|
||||||
|
GameWeek int32
|
||||||
|
}
|
||||||
|
|
||||||
|
const createOrUpdateFixture = `-- name: CreateOrUpdateFixture :exec
|
||||||
|
INSERT INTO fixtures (slug, display_name, state, start_date, end_date, game_week)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6)
|
||||||
|
ON CONFLICT (slug) DO UPDATE
|
||||||
|
SET display_name = $2, state = $3, start_date = $4, end_date = $5, game_week = $6
|
||||||
|
`
|
||||||
|
|
||||||
|
type CreateOrUpdateFixtureParams struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
State string
|
||||||
|
StartDate pgtype.Timestamptz
|
||||||
|
EndDate pgtype.Timestamptz
|
||||||
|
GameWeek int32
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) CreateOrUpdateFixture(ctx context.Context, arg CreateOrUpdateFixtureParams) error {
|
||||||
|
_, err := q.db.Exec(ctx, createOrUpdateFixture,
|
||||||
|
arg.Slug,
|
||||||
|
arg.DisplayName,
|
||||||
|
arg.State,
|
||||||
|
arg.StartDate,
|
||||||
|
arg.EndDate,
|
||||||
|
arg.GameWeek,
|
||||||
|
)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getAllFixtures = `-- name: GetAllFixtures :many
|
||||||
|
SELECT slug, display_name, state, start_date, end_date, game_week FROM fixtures
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetAllFixtures(ctx context.Context) ([]Fixture, error) {
|
||||||
|
rows, err := q.db.Query(ctx, getAllFixtures)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []Fixture
|
||||||
|
for rows.Next() {
|
||||||
|
var i Fixture
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.Slug,
|
||||||
|
&i.DisplayName,
|
||||||
|
&i.State,
|
||||||
|
&i.StartDate,
|
||||||
|
&i.EndDate,
|
||||||
|
&i.GameWeek,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
const getFixtureByGameWeek = `-- name: GetFixtureByGameWeek :one
|
||||||
|
SELECT slug, display_name, state, start_date, end_date, game_week FROM fixtures WHERE game_week = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetFixtureByGameWeek(ctx context.Context, gameWeek int32) (Fixture, error) {
|
||||||
|
row := q.db.QueryRow(ctx, getFixtureByGameWeek, gameWeek)
|
||||||
|
var i Fixture
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Slug,
|
||||||
|
&i.DisplayName,
|
||||||
|
&i.State,
|
||||||
|
&i.StartDate,
|
||||||
|
&i.EndDate,
|
||||||
|
&i.GameWeek,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
|
||||||
|
const getFixtureBySlug = `-- name: GetFixtureBySlug :one
|
||||||
|
SELECT slug, display_name, state, start_date, end_date, game_week FROM fixtures WHERE slug = $1
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetFixtureBySlug(ctx context.Context, slug string) (Fixture, error) {
|
||||||
|
row := q.db.QueryRow(ctx, getFixtureBySlug, slug)
|
||||||
|
var i Fixture
|
||||||
|
err := row.Scan(
|
||||||
|
&i.Slug,
|
||||||
|
&i.DisplayName,
|
||||||
|
&i.State,
|
||||||
|
&i.StartDate,
|
||||||
|
&i.EndDate,
|
||||||
|
&i.GameWeek,
|
||||||
|
)
|
||||||
|
return i, err
|
||||||
|
}
|
32
model/game.sql.go
Normal file
32
model/game.sql.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
// source: game.sql
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CreateGamesParams struct {
|
||||||
|
ID string
|
||||||
|
Date pgtype.Timestamptz
|
||||||
|
CoverageStatus string
|
||||||
|
LowCoverage bool
|
||||||
|
Minutes int32
|
||||||
|
PeriodType string
|
||||||
|
Scored bool
|
||||||
|
Status string
|
||||||
|
CompetitionSlug string
|
||||||
|
FixtureSlug string
|
||||||
|
AwayTeamSlug string
|
||||||
|
AwayGoals int32
|
||||||
|
AwayExtraTimeScore int32
|
||||||
|
AwayPenaltyScore int32
|
||||||
|
HomeTeamSlug string
|
||||||
|
HomeGoals int32
|
||||||
|
HomeExtraTimeScore int32
|
||||||
|
HomePenaltyScore int32
|
||||||
|
WinnerTeamSlug *string
|
||||||
|
}
|
164
model/models.go
Normal file
164
model/models.go
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/jackc/pgx/v5/pgtype"
|
||||||
|
"github.com/shopspring/decimal"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Competition struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
CountrySlug string
|
||||||
|
CompetitionFormat string
|
||||||
|
CompetitionType string
|
||||||
|
PictureUrl string
|
||||||
|
LogoUrl string
|
||||||
|
ZoneID *int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Country struct {
|
||||||
|
Slug string
|
||||||
|
Code string
|
||||||
|
DisplayName string
|
||||||
|
ThreeLetterCode string
|
||||||
|
FlagFlat64Url string
|
||||||
|
FlagFlat32Url string
|
||||||
|
FlagRound64Url string
|
||||||
|
FlagRound32Url string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Fixture struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
State string
|
||||||
|
StartDate time.Time
|
||||||
|
EndDate time.Time
|
||||||
|
GameWeek int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Game struct {
|
||||||
|
ID string
|
||||||
|
Date pgtype.Timestamptz
|
||||||
|
CoverageStatus string
|
||||||
|
LowCoverage bool
|
||||||
|
Minutes int32
|
||||||
|
PeriodType string
|
||||||
|
Scored bool
|
||||||
|
Status string
|
||||||
|
CompetitionSlug string
|
||||||
|
FixtureSlug string
|
||||||
|
AwayTeamSlug string
|
||||||
|
AwayGoals int32
|
||||||
|
AwayExtraTimeScore int32
|
||||||
|
AwayPenaltyScore int32
|
||||||
|
HomeTeamSlug string
|
||||||
|
HomeGoals int32
|
||||||
|
HomeExtraTimeScore int32
|
||||||
|
HomePenaltyScore int32
|
||||||
|
WinnerTeamSlug *string
|
||||||
|
}
|
||||||
|
|
||||||
|
type GamePlayer struct {
|
||||||
|
GameID string
|
||||||
|
PlayerSlug string
|
||||||
|
Status string
|
||||||
|
TeamSlug string
|
||||||
|
}
|
||||||
|
|
||||||
|
type GamePlayerScore struct {
|
||||||
|
GameID string
|
||||||
|
PlayerSlug string
|
||||||
|
Score decimal.Decimal
|
||||||
|
DecisiveScore decimal.Decimal
|
||||||
|
AllAroundScore decimal.Decimal
|
||||||
|
MinutesPlayed int32
|
||||||
|
GameStarted bool
|
||||||
|
FormationPlace int32
|
||||||
|
Live bool
|
||||||
|
OnGameSheet bool
|
||||||
|
Reviewed bool
|
||||||
|
Goal int32
|
||||||
|
Assist int32
|
||||||
|
PenaltyWon int32
|
||||||
|
ClearanceOffLine int32
|
||||||
|
LastManTackle int32
|
||||||
|
PenaltySave int32
|
||||||
|
OwnGoal int32
|
||||||
|
RedCard bool
|
||||||
|
ErrorLeadToGoal int32
|
||||||
|
PenaltyConceded int32
|
||||||
|
YellowCard int32
|
||||||
|
Fouls int32
|
||||||
|
Fouled int32
|
||||||
|
CleanSheet bool
|
||||||
|
DoubleDouble bool
|
||||||
|
TripleDouble bool
|
||||||
|
TripleTriple bool
|
||||||
|
ErrorLeadToShot int32
|
||||||
|
Saves int32
|
||||||
|
SavedShotFromInsideBox int32
|
||||||
|
GoodHighClaim int32
|
||||||
|
Punches int32
|
||||||
|
DivingSave int32
|
||||||
|
DivingCatch int32
|
||||||
|
CrossNotClaimed int32
|
||||||
|
GoalkeeperSmother int32
|
||||||
|
SixSecondViolation int32
|
||||||
|
KeeperSweeper int32
|
||||||
|
GoalsConceded int32
|
||||||
|
EffectiveClearance int32
|
||||||
|
WonTackle int32
|
||||||
|
BlockedCross int32
|
||||||
|
Block int32
|
||||||
|
PossessionLost int32
|
||||||
|
PossessionWon int32
|
||||||
|
DuelLost int32
|
||||||
|
DuelWon int32
|
||||||
|
Interception int32
|
||||||
|
AccuratePass int32
|
||||||
|
AccurateFinalThirdPass int32
|
||||||
|
AccurateLongBall int32
|
||||||
|
LongPassIntoOpposition int32
|
||||||
|
MissedPass int32
|
||||||
|
ShotOnTarget int32
|
||||||
|
WonContest int32
|
||||||
|
BigChanceCreated int32
|
||||||
|
AttemptedAssist int32
|
||||||
|
PenaltyAreaEntries int32
|
||||||
|
PenaltyKickMissed int32
|
||||||
|
BigChanceMissed int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Player struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
BirthDate time.Time
|
||||||
|
CountrySlug string
|
||||||
|
TeamSlug string
|
||||||
|
DomesticLeagueSlug string
|
||||||
|
AvatarUrl string
|
||||||
|
FieldPosition string
|
||||||
|
Status string
|
||||||
|
ShirtNumber int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Team struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
CountrySlug string
|
||||||
|
DomesticLeagueSlug *string
|
||||||
|
ShortName string
|
||||||
|
PictureUrl string
|
||||||
|
TeamType string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Zone struct {
|
||||||
|
ID int32
|
||||||
|
DisplayName string
|
||||||
|
}
|
39
model/sql/competition.sql
Normal file
39
model/sql/competition.sql
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
-- name: CreateOrUpdateCompetition :exec
|
||||||
|
INSERT INTO competitions (
|
||||||
|
slug,
|
||||||
|
display_name,
|
||||||
|
country_slug,
|
||||||
|
competition_format,
|
||||||
|
competition_type,
|
||||||
|
picture_url,
|
||||||
|
logo_url
|
||||||
|
)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7) ON CONFLICT (slug)
|
||||||
|
DO
|
||||||
|
UPDATE
|
||||||
|
SET display_name = EXCLUDED.display_name,
|
||||||
|
competition_format = EXCLUDED.competition_format,
|
||||||
|
competition_type = EXCLUDED.competition_type,
|
||||||
|
picture_url = EXCLUDED.picture_url,
|
||||||
|
logo_url = EXCLUDED.logo_url,
|
||||||
|
country_slug = EXCLUDED.country_slug;
|
||||||
|
|
||||||
|
-- name: GetCompetitionBySlug :one
|
||||||
|
SELECT sqlc.embed(competitions),
|
||||||
|
sqlc.embed(zones),
|
||||||
|
sqlc.embed(countries)
|
||||||
|
FROM competitions
|
||||||
|
LEFT JOIN zones ON competitions.zone_id = zones.id
|
||||||
|
LEFT JOIN countries ON competitions.country_slug = countries.slug
|
||||||
|
WHERE competitions.slug = $1;
|
||||||
|
|
||||||
|
|
||||||
|
-- name: GetAllCompetitions :many
|
||||||
|
SELECT sqlc.embed(competitions),
|
||||||
|
sqlc.embed(zones),
|
||||||
|
sqlc.embed(countries)
|
||||||
|
FROM competitions
|
||||||
|
LEFT JOIN zones ON competitions.zone_id = zones.id
|
||||||
|
LEFT JOIN countries ON competitions.country_slug = countries.slug;
|
||||||
|
|
||||||
|
|
34
model/sql/country.sql
Normal file
34
model/sql/country.sql
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
-- name: CreateCountries :copyfrom
|
||||||
|
INSERT INTO countries (
|
||||||
|
slug,
|
||||||
|
code,
|
||||||
|
display_name,
|
||||||
|
three_letter_code,
|
||||||
|
flag_flat_64_url,
|
||||||
|
flag_flat_32_url,
|
||||||
|
flag_round_64_url,
|
||||||
|
flag_round_32_url
|
||||||
|
)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8);
|
||||||
|
|
||||||
|
-- name: CreateOrUpdateCountry :exec
|
||||||
|
INSERT INTO countries (
|
||||||
|
slug,
|
||||||
|
code,
|
||||||
|
display_name,
|
||||||
|
three_letter_code,
|
||||||
|
flag_flat_64_url,
|
||||||
|
flag_flat_32_url,
|
||||||
|
flag_round_64_url,
|
||||||
|
flag_round_32_url
|
||||||
|
)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8) ON CONFLICT (slug)
|
||||||
|
DO
|
||||||
|
UPDATE
|
||||||
|
SET code = EXCLUDED.code,
|
||||||
|
display_name = EXCLUDED.display_name,
|
||||||
|
three_letter_code = EXCLUDED.three_letter_code,
|
||||||
|
flag_flat_64_url = EXCLUDED.flag_flat_64_url,
|
||||||
|
flag_flat_32_url = EXCLUDED.flag_flat_32_url,
|
||||||
|
flag_round_64_url = EXCLUDED.flag_round_64_url,
|
||||||
|
flag_round_32_url = EXCLUDED.flag_round_32_url;
|
23
model/sql/fixture.sql
Normal file
23
model/sql/fixture.sql
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
-- Active: 1709890109198@@192.168.1.250@5436@sorare
|
||||||
|
-- name: CreateFixtures :copyfrom
|
||||||
|
INSERT INTO fixtures (slug, display_name, state, start_date, end_date, game_week)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6);
|
||||||
|
|
||||||
|
-- name: CreateOrUpdateFixture :exec
|
||||||
|
INSERT INTO fixtures (slug, display_name, state, start_date, end_date, game_week)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6)
|
||||||
|
ON CONFLICT (slug) DO UPDATE
|
||||||
|
SET display_name = $2, state = $3, start_date = $4, end_date = $5, game_week = $6;
|
||||||
|
|
||||||
|
-- name: GetFixtureBySlug :one
|
||||||
|
SELECT * FROM fixtures WHERE slug = $1;
|
||||||
|
|
||||||
|
-- name: GetFixtureByGameWeek :one
|
||||||
|
SELECT * FROM fixtures WHERE game_week = $1;
|
||||||
|
|
||||||
|
-- name: GetAllFixtures :many
|
||||||
|
SELECT * FROM fixtures;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
4
model/sql/game.sql
Normal file
4
model/sql/game.sql
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
-- name: CreateGames :copyfrom
|
||||||
|
INSERT INTO games (id, date, coverage_status, low_coverage, minutes, period_type, scored, status, competition_slug, fixture_slug, away_team_slug, away_goals, away_extra_time_score, away_penalty_score, home_team_slug, home_goals, home_extra_time_score, home_penalty_score, winner_team_slug)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19);
|
||||||
|
|
3
model/sql/team.sql
Normal file
3
model/sql/team.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
-- name: CreateTeams :copyfrom
|
||||||
|
INSERT INTO teams (slug, display_name, country_slug, domestic_league_slug, short_name, picture_url, team_type)
|
||||||
|
VALUES ($1, $2, $3, $4, $5, $6, $7);
|
2
model/sql/test.sql
Normal file
2
model/sql/test.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
select * from competitions
|
||||||
|
join games on games.id = competitions.game_id
|
2
model/sql/zone.sql
Normal file
2
model/sql/zone.sql
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
-- name: CountZones :one
|
||||||
|
SELECT COUNT(*) FROM zones;
|
18
model/team.sql.go
Normal file
18
model/team.sql.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
// source: team.sql
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import ()
|
||||||
|
|
||||||
|
type CreateTeamsParams struct {
|
||||||
|
Slug string
|
||||||
|
DisplayName string
|
||||||
|
CountrySlug string
|
||||||
|
DomesticLeagueSlug *string
|
||||||
|
ShortName string
|
||||||
|
PictureUrl string
|
||||||
|
TeamType string
|
||||||
|
}
|
21
model/zone.sql.go
Normal file
21
model/zone.sql.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Code generated by sqlc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// sqlc v1.25.0
|
||||||
|
// source: zone.sql
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
const countZones = `-- name: CountZones :one
|
||||||
|
SELECT COUNT(*) FROM zones
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) CountZones(ctx context.Context) (int64, error) {
|
||||||
|
row := q.db.QueryRow(ctx, countZones)
|
||||||
|
var count int64
|
||||||
|
err := row.Scan(&count)
|
||||||
|
return count, err
|
||||||
|
}
|
25
sqlc.yml
Normal file
25
sqlc.yml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
version: "2"
|
||||||
|
sql:
|
||||||
|
- engine: "postgresql"
|
||||||
|
queries: "model/sql/*.sql"
|
||||||
|
schema: "db/migrations"
|
||||||
|
database:
|
||||||
|
uri: postgresql://sorare:sorare@192.168.1.250:5436/sorare?sslmode=disable
|
||||||
|
gen:
|
||||||
|
go:
|
||||||
|
package: "model"
|
||||||
|
out: "model"
|
||||||
|
sql_package: "pgx/v5"
|
||||||
|
emit_pointers_for_null_types: true
|
||||||
|
overrides:
|
||||||
|
- db_type: "timestamptz"
|
||||||
|
go_type: "time.Time"
|
||||||
|
- db_type: "date"
|
||||||
|
go_type: "time.Time"
|
||||||
|
- db_type: "pg_catalog.numeric"
|
||||||
|
go_type:
|
||||||
|
import: "github.com/shopspring/decimal"
|
||||||
|
type: "Decimal"
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user