diff --git a/controllers/player_advanced_controller.go b/controllers/player_advanced_controller.go index 859afe7..788ffd0 100644 --- a/controllers/player_advanced_controller.go +++ b/controllers/player_advanced_controller.go @@ -8,6 +8,15 @@ import ( "github.com/nprasad2077/NBA_Go/services" ) +var advancedSortMap = map[string]string{ + "winShares": "win_shares", + "per": "per", + "tsPercent": "ts_percent", + "playerId": "player_id", + "season": "season", + "team": "team", +} + // AdvancedStatsResponse is the swagger response model for GetAllAdvancedPlayerStats // It wraps the returned player advanced stats and pagination metadata. type AdvancedStatsResponse struct { @@ -43,6 +52,7 @@ type AdvancedStatsResponse struct { // @Success 200 {object} map[string]string // @Failure 400,500 {object} map[string]string // @Router /api/playeradvancedstats/scrape [get] +// @ignore func ScrapePlayerAdvancedStats(db *gorm.DB) fiber.Handler { return func(c *fiber.Ctx) error { season := c.QueryInt("season", 0) @@ -80,23 +90,38 @@ func GetAllAdvancedPlayerStats(db *gorm.DB) fiber.Handler { return func(c *fiber.Ctx) error { var stats []models.PlayerAdvancedStat + // --- MODIFICATION FOR FILTERS --- + // Allow both "playerId" and "player_id" + playerId := c.Query("playerId") + if playerId == "" { + playerId = c.Query("player_id") + } + // Filters season := c.QueryInt("season", 0) team := c.Query("team") - playerId := c.Query("playerId") + // playerId := c.Query("playerId") // Pagination page := c.QueryInt("page", 1) pageSize := c.QueryInt("pageSize", 20) offset := (page - 1) * pageSize - // Sorting - sortBy := c.Query("sortBy", "win_shares") - ascending := c.QueryBool("ascending", false) - order := sortBy + " DESC" - if ascending { - order = sortBy + " ASC" - } + // --- MODIFICATION FOR SORTING --- + // Sorting + sortByParam := c.Query("sortBy", "winShares") // Default to a common field + ascending := c.QueryBool("ascending", false) + + // Translate sortBy param to a valid DB column, defaulting if not found. + sortBy, ok := advancedSortMap[sortByParam] + if !ok { + sortBy = "win_shares" // Safe default + } + + order := sortBy + " DESC" + if ascending { + order = sortBy + " ASC" + } // Build query query := db.Model(&models.PlayerAdvancedStat{}) diff --git a/controllers/player_shot_chart_controller.go b/controllers/player_shot_chart_controller.go index eee0a87..9b4dd66 100644 --- a/controllers/player_shot_chart_controller.go +++ b/controllers/player_shot_chart_controller.go @@ -44,6 +44,7 @@ import ( // @Success 200 {object} map[string]string // @Failure 400,500 {object} map[string]string // @Router /api/playershotchart/scrape [get] +// @ignore func ScrapePlayerShotChart(db *gorm.DB) fiber.Handler { return func(c *fiber.Ctx) error { pid := c.Query("playerId") diff --git a/controllers/player_total_controller.go b/controllers/player_total_controller.go index e8fd708..34ddeb8 100644 --- a/controllers/player_total_controller.go +++ b/controllers/player_total_controller.go @@ -19,6 +19,19 @@ import ( "gorm.io/gorm" ) +var totalSortMap = map[string]string{ + "points": "points", + "assists": "assists", + "totalRb": "total_rb", + "gamesStarted": "games_started", + "fieldPercent": "field_percent", + "threePercent": "three_percent", + "ftPercent": "ft_percent", + "playerId": "player_id", + "season": "season", + "team": "team", +} + // func FetchPlayerTotalStats(db *gorm.DB) fiber.Handler { // return func(c *fiber.Ctx) error { // season := c.QueryInt("season", 2025) @@ -41,6 +54,7 @@ import ( // @Success 200 {object} map[string]string // @Failure 400,500 {object} map[string]string // @Router /api/playertotals/scrape [get] +// @ignore func ScrapePlayerTotalStats(db *gorm.DB) fiber.Handler { return func(c *fiber.Ctx) error { season := c.QueryInt("season", 0) @@ -78,18 +92,33 @@ func GetPlayerTotalStats(db *gorm.DB) fiber.Handler { return func(c *fiber.Ctx) error { var stats []models.PlayerTotalStat + // --- MODIFICATION FOR FILTERS --- + playerId := c.Query("playerId") + if playerId == "" { + playerId = c.Query("player_id") + } + season := c.QueryInt("season", 0) team := c.Query("team") - playerId := c.Query("playerId") + // playerId := c.Query("playerId") page := c.QueryInt("page", 1) pageSize := c.QueryInt("pageSize", 20) - sortBy := c.Query("sortBy", "points") - ascending := c.QueryBool("ascending", false) - offset := (page - 1) * pageSize - order := sortBy + " DESC" - if ascending { - order = sortBy + " ASC" - } + + // --- MODIFICATION FOR SORTING --- + sortByParam := c.Query("sortBy", "points") + ascending := c.QueryBool("ascending", false) + + // Translate sortBy param to a valid DB column, defaulting if not found. + sortBy, ok := totalSortMap[sortByParam] + if !ok { + sortBy = "points" // Safe default + } + + offset := (page - 1) * pageSize + order := sortBy + " DESC" + if ascending { + order = sortBy + " ASC" + } query := db.Model(&models.PlayerTotalStat{}) diff --git a/docker-compose.yml b/docker-compose.yml index 56052f6..83834bc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,7 @@ services: db-init: build: . env_file: .env - command: ["/nba_go"] + command: ["/nba_go", "import-data"] depends_on: postgres: condition: service_healthy