mirror of
https://github.com/nprasad2077/NBA_Go.git
synced 2026-09-22 14:05:13 +00:00
fix sortby queries
This commit is contained in:
@@ -8,6 +8,15 @@ import (
|
|||||||
"github.com/nprasad2077/NBA_Go/services"
|
"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
|
// AdvancedStatsResponse is the swagger response model for GetAllAdvancedPlayerStats
|
||||||
// It wraps the returned player advanced stats and pagination metadata.
|
// It wraps the returned player advanced stats and pagination metadata.
|
||||||
type AdvancedStatsResponse struct {
|
type AdvancedStatsResponse struct {
|
||||||
@@ -43,6 +52,7 @@ type AdvancedStatsResponse struct {
|
|||||||
// @Success 200 {object} map[string]string
|
// @Success 200 {object} map[string]string
|
||||||
// @Failure 400,500 {object} map[string]string
|
// @Failure 400,500 {object} map[string]string
|
||||||
// @Router /api/playeradvancedstats/scrape [get]
|
// @Router /api/playeradvancedstats/scrape [get]
|
||||||
|
// @ignore
|
||||||
func ScrapePlayerAdvancedStats(db *gorm.DB) fiber.Handler {
|
func ScrapePlayerAdvancedStats(db *gorm.DB) fiber.Handler {
|
||||||
return func(c *fiber.Ctx) error {
|
return func(c *fiber.Ctx) error {
|
||||||
season := c.QueryInt("season", 0)
|
season := c.QueryInt("season", 0)
|
||||||
@@ -80,23 +90,38 @@ func GetAllAdvancedPlayerStats(db *gorm.DB) fiber.Handler {
|
|||||||
return func(c *fiber.Ctx) error {
|
return func(c *fiber.Ctx) error {
|
||||||
var stats []models.PlayerAdvancedStat
|
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
|
// Filters
|
||||||
season := c.QueryInt("season", 0)
|
season := c.QueryInt("season", 0)
|
||||||
team := c.Query("team")
|
team := c.Query("team")
|
||||||
playerId := c.Query("playerId")
|
// playerId := c.Query("playerId")
|
||||||
|
|
||||||
// Pagination
|
// Pagination
|
||||||
page := c.QueryInt("page", 1)
|
page := c.QueryInt("page", 1)
|
||||||
pageSize := c.QueryInt("pageSize", 20)
|
pageSize := c.QueryInt("pageSize", 20)
|
||||||
offset := (page - 1) * pageSize
|
offset := (page - 1) * pageSize
|
||||||
|
|
||||||
// Sorting
|
// --- MODIFICATION FOR SORTING ---
|
||||||
sortBy := c.Query("sortBy", "win_shares")
|
// Sorting
|
||||||
ascending := c.QueryBool("ascending", false)
|
sortByParam := c.Query("sortBy", "winShares") // Default to a common field
|
||||||
order := sortBy + " DESC"
|
ascending := c.QueryBool("ascending", false)
|
||||||
if ascending {
|
|
||||||
order = sortBy + " ASC"
|
// 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
|
// Build query
|
||||||
query := db.Model(&models.PlayerAdvancedStat{})
|
query := db.Model(&models.PlayerAdvancedStat{})
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import (
|
|||||||
// @Success 200 {object} map[string]string
|
// @Success 200 {object} map[string]string
|
||||||
// @Failure 400,500 {object} map[string]string
|
// @Failure 400,500 {object} map[string]string
|
||||||
// @Router /api/playershotchart/scrape [get]
|
// @Router /api/playershotchart/scrape [get]
|
||||||
|
// @ignore
|
||||||
func ScrapePlayerShotChart(db *gorm.DB) fiber.Handler {
|
func ScrapePlayerShotChart(db *gorm.DB) fiber.Handler {
|
||||||
return func(c *fiber.Ctx) error {
|
return func(c *fiber.Ctx) error {
|
||||||
pid := c.Query("playerId")
|
pid := c.Query("playerId")
|
||||||
|
|||||||
@@ -19,6 +19,19 @@ import (
|
|||||||
"gorm.io/gorm"
|
"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 {
|
// func FetchPlayerTotalStats(db *gorm.DB) fiber.Handler {
|
||||||
// return func(c *fiber.Ctx) error {
|
// return func(c *fiber.Ctx) error {
|
||||||
// season := c.QueryInt("season", 2025)
|
// season := c.QueryInt("season", 2025)
|
||||||
@@ -41,6 +54,7 @@ import (
|
|||||||
// @Success 200 {object} map[string]string
|
// @Success 200 {object} map[string]string
|
||||||
// @Failure 400,500 {object} map[string]string
|
// @Failure 400,500 {object} map[string]string
|
||||||
// @Router /api/playertotals/scrape [get]
|
// @Router /api/playertotals/scrape [get]
|
||||||
|
// @ignore
|
||||||
func ScrapePlayerTotalStats(db *gorm.DB) fiber.Handler {
|
func ScrapePlayerTotalStats(db *gorm.DB) fiber.Handler {
|
||||||
return func(c *fiber.Ctx) error {
|
return func(c *fiber.Ctx) error {
|
||||||
season := c.QueryInt("season", 0)
|
season := c.QueryInt("season", 0)
|
||||||
@@ -78,18 +92,33 @@ func GetPlayerTotalStats(db *gorm.DB) fiber.Handler {
|
|||||||
return func(c *fiber.Ctx) error {
|
return func(c *fiber.Ctx) error {
|
||||||
var stats []models.PlayerTotalStat
|
var stats []models.PlayerTotalStat
|
||||||
|
|
||||||
|
// --- MODIFICATION FOR FILTERS ---
|
||||||
|
playerId := c.Query("playerId")
|
||||||
|
if playerId == "" {
|
||||||
|
playerId = c.Query("player_id")
|
||||||
|
}
|
||||||
|
|
||||||
season := c.QueryInt("season", 0)
|
season := c.QueryInt("season", 0)
|
||||||
team := c.Query("team")
|
team := c.Query("team")
|
||||||
playerId := c.Query("playerId")
|
// playerId := c.Query("playerId")
|
||||||
page := c.QueryInt("page", 1)
|
page := c.QueryInt("page", 1)
|
||||||
pageSize := c.QueryInt("pageSize", 20)
|
pageSize := c.QueryInt("pageSize", 20)
|
||||||
sortBy := c.Query("sortBy", "points")
|
|
||||||
ascending := c.QueryBool("ascending", false)
|
// --- MODIFICATION FOR SORTING ---
|
||||||
offset := (page - 1) * pageSize
|
sortByParam := c.Query("sortBy", "points")
|
||||||
order := sortBy + " DESC"
|
ascending := c.QueryBool("ascending", false)
|
||||||
if ascending {
|
|
||||||
order = sortBy + " ASC"
|
// 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{})
|
query := db.Model(&models.PlayerTotalStat{})
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ services:
|
|||||||
db-init:
|
db-init:
|
||||||
build: .
|
build: .
|
||||||
env_file: .env
|
env_file: .env
|
||||||
command: ["/nba_go"]
|
command: ["/nba_go", "import-data"]
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|||||||
Reference in New Issue
Block a user