mirror of
https://github.com/nprasad2077/NBA_Go.git
synced 2026-09-22 14:05:13 +00:00
advanced models/controllers/service docs update
This commit is contained in:
@@ -1,44 +1,58 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"gorm.io/gorm"
|
||||
"github.com/nprasad2077/NBA_Go/services"
|
||||
"github.com/nprasad2077/NBA_Go/models"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/nprasad2077/NBA_Go/models"
|
||||
"github.com/nprasad2077/NBA_Go/services"
|
||||
)
|
||||
|
||||
func FetchPlayerAdvancedStats(db *gorm.DB) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
season := c.QueryInt("season", 2025)
|
||||
|
||||
// Call service and assign err here
|
||||
err := services.FetchAndStorePlayerAdvancedStats(db, season)
|
||||
if err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
return c.JSON(fiber.Map{"message": "Player stats fetched and saved."})
|
||||
}
|
||||
// AdvancedStatsResponse is the swagger response model for GetAllAdvancedPlayerStats
|
||||
// It wraps the returned player advanced stats and pagination metadata.
|
||||
type AdvancedStatsResponse struct {
|
||||
Data []models.PlayerAdvancedStat `json:"data"`
|
||||
Pagination struct {
|
||||
Total int64 `json:"total"`
|
||||
Page int `json:"page"`
|
||||
PageSize int `json:"pageSize"`
|
||||
Pages int64 `json:"pages"`
|
||||
} `json:"pagination"`
|
||||
}
|
||||
|
||||
// FetchPlayerAdvancedStats returns a handler that imports advanced stats for a season
|
||||
// Note: not exposed in Swagger docs, only internal use.
|
||||
func FetchPlayerAdvancedStats(db *gorm.DB) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
season := c.QueryInt("season", 2025)
|
||||
isPlayoff := c.QueryBool("isPlayoff", false)
|
||||
|
||||
if err := services.FetchAndStorePlayerAdvancedStats(db, season, isPlayoff); err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
// GetAllPlayerStats godoc
|
||||
// @Security ApiKeyAuth
|
||||
// @Summary Get player stats
|
||||
// @Description Returns filtered and paginated player stats
|
||||
// @Tags PlayerStats
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param season query int false "Season (e.g., 2025)"
|
||||
// @Param team query string false "Team abbreviation (e.g., MIL)"
|
||||
// @Param playerId query string false "Player ID (e.g., greenaj01)"
|
||||
// @Param page query int false "Page number" default(1)
|
||||
// @Param pageSize query int false "Page size" default(20)
|
||||
// @Param sortBy query string false "Field to sort by (e.g., per, games, winShares)"
|
||||
// @Param ascending query bool false "Sort ascending (default false)"
|
||||
// @Success 200 {object} map[string]interface{}
|
||||
// @Router /api/playeradvancedstats [get]
|
||||
return c.JSON(fiber.Map{"message": "Player stats fetched and saved."})
|
||||
}
|
||||
}
|
||||
|
||||
// GetAllAdvancedPlayerStats godoc
|
||||
// @Security ApiKeyAuth
|
||||
// @Summary Get player advanced stats
|
||||
// @Description Returns filtered and paginated player advanced stats
|
||||
// @Tags PlayerStats
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param season query int false "Season (e.g., 2025)"
|
||||
// @Param team query string false "Team abbreviation (e.g., MIL)"
|
||||
// @Param playerId query string false "Player ID (e.g., greenaj01)"
|
||||
// @Param page query int false "Page number" default(1)
|
||||
// @Param pageSize query int false "Page size" default(20)
|
||||
// @Param sortBy query string false "Field to sort by" default(winShares)
|
||||
// @Param ascending query bool false "Sort ascending" default(false)
|
||||
// @Param isPlayoff query bool false "Whether playoffs?"
|
||||
// @Success 200 {object} controllers.AdvancedStatsResponse
|
||||
// @Failure 500 {object} map[string]string
|
||||
// @Router /api/playeradvancedstats [get]
|
||||
func GetAllAdvancedPlayerStats(db *gorm.DB) fiber.Handler {
|
||||
return func(c *fiber.Ctx) error {
|
||||
var stats []models.PlayerAdvancedStat
|
||||
@@ -54,7 +68,7 @@ func GetAllAdvancedPlayerStats(db *gorm.DB) fiber.Handler {
|
||||
offset := (page - 1) * pageSize
|
||||
|
||||
// Sorting
|
||||
sortBy := c.Query("sortBy", "win_shares") // default field
|
||||
sortBy := c.Query("sortBy", "win_shares")
|
||||
ascending := c.QueryBool("ascending", false)
|
||||
order := sortBy + " DESC"
|
||||
if ascending {
|
||||
@@ -74,23 +88,28 @@ func GetAllAdvancedPlayerStats(db *gorm.DB) fiber.Handler {
|
||||
query = query.Where("player_id = ?", playerId)
|
||||
}
|
||||
|
||||
var total int64
|
||||
query.Count(&total) // get total count before pagination
|
||||
if c.Query("isPlayoff") != "" {
|
||||
isPlayoff := c.QueryBool("isPlayoff", false)
|
||||
query = query.Where("is_playoff = ?", isPlayoff)
|
||||
}
|
||||
|
||||
// Count total
|
||||
var total int64
|
||||
query.Count(&total)
|
||||
|
||||
// Fetch page
|
||||
err := query.Order(order).Limit(pageSize).Offset(offset).Find(&stats).Error
|
||||
if err != nil {
|
||||
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
|
||||
// Response with metadata
|
||||
return c.JSON(fiber.Map{
|
||||
"data": stats,
|
||||
"pagination": fiber.Map{
|
||||
"total": total,
|
||||
"page": page,
|
||||
"pageSize": pageSize,
|
||||
"pages": (total + int64(pageSize) - 1) / int64(pageSize),
|
||||
},
|
||||
})
|
||||
// Build response
|
||||
resp := AdvancedStatsResponse{Data: stats}
|
||||
resp.Pagination.Total = total
|
||||
resp.Pagination.Page = page
|
||||
resp.Pagination.PageSize = pageSize
|
||||
resp.Pagination.Pages = (total + int64(pageSize) - 1) / int64(pageSize)
|
||||
|
||||
return c.JSON(resp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user