mirror of
https://github.com/nprasad2077/NBA_Go.git
synced 2026-09-23 14:35:13 +00:00
73 lines
2.5 KiB
Go
73 lines
2.5 KiB
Go
// NBA_Go/controllers/player_shot_chart_controller.go
|
|
package controllers
|
|
|
|
import (
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/nprasad2077/NBA_Go/models"
|
|
"github.com/nprasad2077/NBA_Go/services"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// FetchPlayerShotChart godoc
|
|
// @Summary Fetch a single player's shot-chart data from external API
|
|
// @Description Imports shot-chart data for the given playerId and stores/updates in DB
|
|
// @Tags PlayerShotChart
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param playerId query string true "Player ID (e.g., hardeja01)"
|
|
// @Success 200 {object} map[string]string
|
|
// @Failure 400 {object} map[string]string
|
|
// @Failure 500 {object} map[string]string
|
|
// @Router /api/playershotchart/fetch [get]
|
|
func FetchPlayerShotChart(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
pid := c.Query("playerId")
|
|
if pid == "" {
|
|
return c.Status(400).JSON(fiber.Map{
|
|
"error": "playerId query parameter is required",
|
|
})
|
|
}
|
|
if err := services.FetchAndStoreShotChartForPlayer(db, pid); err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(fiber.Map{"message": "Shot chart for " + pid + " fetched and saved."})
|
|
}
|
|
}
|
|
|
|
// GetPlayerShotChart godoc
|
|
// @Security ApiKeyAuth
|
|
// @Summary Get shot-chart data
|
|
// @Description Returns shot-chart points, optionally filtered by playerId and/or season
|
|
// @Tags PlayerShotChart
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param playerId query string false "Player ID (e.g., hardeja01)"
|
|
// @Param season query int false "Season (e.g., 2023)"
|
|
// @Success 200 {array} models.PlayerShotChart
|
|
// @Failure 500 {object} map[string]string
|
|
// @Router /api/playershotchart [get]
|
|
func GetPlayerShotChart(db *gorm.DB) fiber.Handler {
|
|
return func(c *fiber.Ctx) error {
|
|
var shots []models.PlayerShotChart
|
|
|
|
// Start with the base model
|
|
query := db.Model(&models.PlayerShotChart{})
|
|
|
|
// Optional filter: playerId
|
|
if pid := c.Query("playerId"); pid != "" {
|
|
query = query.Where("player_id = ?", pid)
|
|
}
|
|
|
|
// Optional filter: season
|
|
if s := c.QueryInt("season", 0); s != 0 {
|
|
query = query.Where("season = ?", s)
|
|
}
|
|
|
|
// Execute
|
|
if err := query.Find(&shots).Error; err != nil {
|
|
return c.Status(500).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
|
|
return c.JSON(shots)
|
|
}
|
|
} |