diff --git a/main.go b/main.go index 21d641c..474069c 100644 --- a/main.go +++ b/main.go @@ -91,6 +91,18 @@ func main() { log.Printf("player totals Import Success") }() + go func() { + for season := 2023; season <= 2024; season++ { + if err := services.FetchAndStorePlayerTotalPlayoffsStats(db, season, true); err != nil { + log.Printf("Fetch failed for player totals Playoffs season %d: %v\n", season, err) + } else { + log.Printf("Fetch successful for player totals Playoffs season %d\n", season) + } + time.Sleep(1500 * time.Millisecond) // optional delay + } + log.Printf("player totals Playoffs Import Success") + }() + /* ---------- START & SHUTDOWN ---------- */ go func() { if err := app.Listen(":5000"); err != nil && !errors.Is(err, http.ErrServerClosed) { diff --git a/services/player_total_playoffs_service.go b/services/player_total_playoffs_service.go new file mode 100644 index 0000000..0a5978d --- /dev/null +++ b/services/player_total_playoffs_service.go @@ -0,0 +1,52 @@ +package services + +import ( + "encoding/json" + "fmt" + "log" + + "github.com/nprasad2077/NBA_Go/models" + "github.com/nprasad2077/NBA_Go/utils" + "gorm.io/gorm" + "gorm.io/gorm/clause" +) + +func FetchAndStorePlayerTotalPlayoffsStats(db *gorm.DB, season int, isPlayoff bool) error { + url := fmt.Sprintf( + "http://rest.nbaapi.com/api/PlayerDataTotalsPlayoffs/query?season=%d&sortBy=PlayerName&ascending=true&pageNumber=1&pageSize=1000", + season, + ) + + body, err := utils.GetJSON(url) + if err != nil { + return err + } + + var stats []models.PlayerTotalStat + if err := json.Unmarshal(body, &stats); err != nil { + return err + } + + for _, stat := range stats { + stat.Season = season + stat.IsPlayoff = isPlayoff + + err := db.Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "player_id"}, {Name: "season"}, {Name: "team"}, {Name: "is_playoff"}}, + DoUpdates: clause.AssignmentColumns([]string{ + "player_name", "position", "age", "games", "games_started", + "minutes_pg", "field_goals", "field_attempts", "field_percent", + "three_fg", "three_attempts", "three_percent", "two_fg", "two_attempts", + "two_percent", "effect_fg_percent", "ft", "ft_attempts", "ft_percent", + "offensive_rb", "defensive_rb", "total_rb", "assists", "steals", + "blocks", "turnovers", "personal_fouls", "points", + }), + }).Create(&stat).Error + + if err != nil { + log.Printf("Failed to upsert PlayerTotalStat for playerId %s: %v", stat.PlayerID, err) + } + } + + return nil +} \ No newline at end of file