games endpoint and controller

This commit is contained in:
Ravi Prasad
2025-07-16 23:45:31 -05:00
parent 7dcec04f5d
commit 681bf80408
9 changed files with 1734 additions and 3 deletions
+488
View File
@@ -15,6 +15,104 @@ const docTemplate = `{
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/api/games": {
"get": {
"description": "Returns a paginated list of games with optional filters and included associations.",
"produces": [
"application/json"
],
"tags": [
"Games"
],
"summary": "Get game data",
"parameters": [
{
"type": "string",
"description": "Filter by date (YYYY-MM-DD)",
"name": "date",
"in": "query"
},
{
"type": "string",
"description": "Filter by team abbreviation (e.g., LAL)",
"name": "team",
"in": "query"
},
{
"type": "string",
"description": "Filter by a specific Game ID",
"name": "gameId",
"in": "query"
},
{
"type": "boolean",
"description": "Filter for playoff games",
"name": "isPlayoff",
"in": "query"
},
{
"type": "integer",
"default": 1,
"description": "Page number",
"name": "page",
"in": "query"
},
{
"type": "integer",
"default": 20,
"description": "Page size",
"name": "pageSize",
"in": "query"
},
{
"type": "string",
"default": "date",
"description": "Field to sort by (e.g., date)",
"name": "sortBy",
"in": "query"
},
{
"type": "boolean",
"default": false,
"description": "Sort ascending",
"name": "ascending",
"in": "query"
},
{
"type": "string",
"description": "Comma-separated list of associations to include (e.g., lineScores,playerGameBasicStats,teamGameAdvStats)",
"name": "include",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.GamesResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/api/playeradvancedstats": {
"get": {
"description": "Returns filtered and paginated player advanced stats",
@@ -304,6 +402,393 @@ const docTemplate = `{
}
}
},
"controllers.GameResponseDTO": {
"type": "object",
"properties": {
"arena": {
"type": "string"
},
"boxScoreUrl": {
"type": "string"
},
"date": {
"type": "string"
},
"gameDuration": {
"type": "string"
},
"gameId": {
"type": "string"
},
"homePts": {
"type": "integer"
},
"homeTeam": {
"type": "string"
},
"id": {
"type": "integer"
},
"isPlayoff": {
"type": "boolean"
},
"lineScores": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.LineScoreDTO"
}
},
"playerGameAdvStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.PlayerGameAdvStatDTO"
}
},
"playerGameBasicStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.PlayerGameBasicStatDTO"
}
},
"startTimeET": {
"type": "string"
},
"teamGameAdvStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.TeamGameAdvStatDTO"
}
},
"teamGameBasicStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.TeamGameBasicStatDTO"
}
},
"visitorPts": {
"type": "integer"
},
"visitorTeam": {
"type": "string"
}
}
},
"controllers.GamesResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.GameResponseDTO"
}
},
"pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"total": {
"type": "integer"
}
}
}
}
},
"controllers.LineScoreDTO": {
"type": "object",
"properties": {
"ot1": {
"type": "integer"
},
"ot2": {
"type": "integer"
},
"ot3": {
"type": "integer"
},
"q1": {
"type": "integer"
},
"q2": {
"type": "integer"
},
"q3": {
"type": "integer"
},
"q4": {
"type": "integer"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"total": {
"type": "integer"
}
}
},
"controllers.PlayerGameAdvStatDTO": {
"type": "object",
"properties": {
"astPercent": {
"type": "number"
},
"blkPercent": {
"type": "number"
},
"bpm": {
"type": "number"
},
"dRtg": {
"type": "integer"
},
"drbPercent": {
"type": "number"
},
"efgPercent": {
"type": "number"
},
"fTr": {
"type": "number"
},
"mp": {
"type": "string"
},
"oRtg": {
"type": "integer"
},
"orbPercent": {
"type": "number"
},
"playerId": {
"type": "string"
},
"playerName": {
"type": "string"
},
"stlPercent": {
"type": "number"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threePAr": {
"type": "number"
},
"tovPercent": {
"type": "number"
},
"trbPercent": {
"type": "number"
},
"tsPercent": {
"type": "number"
},
"usgPercent": {
"type": "number"
}
}
},
"controllers.PlayerGameBasicStatDTO": {
"type": "object",
"properties": {
"ast": {
"type": "integer"
},
"blk": {
"type": "integer"
},
"drb": {
"type": "integer"
},
"fg": {
"type": "integer"
},
"fgPercent": {
"type": "number"
},
"fga": {
"type": "integer"
},
"ft": {
"type": "integer"
},
"ftPercent": {
"type": "number"
},
"fta": {
"type": "integer"
},
"gmSc": {
"type": "number"
},
"mp": {
"type": "string"
},
"orb": {
"type": "integer"
},
"pf": {
"type": "integer"
},
"playerId": {
"type": "string"
},
"playerName": {
"type": "string"
},
"plusMinus": {
"type": "integer"
},
"pts": {
"type": "integer"
},
"status": {
"type": "string"
},
"stl": {
"type": "integer"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threeP": {
"type": "integer"
},
"threePPercent": {
"type": "number"
},
"threePa": {
"type": "integer"
},
"tov": {
"type": "integer"
},
"trb": {
"type": "integer"
}
}
},
"controllers.TeamGameAdvStatDTO": {
"type": "object",
"properties": {
"astPercent": {
"type": "number"
},
"blkPercent": {
"type": "number"
},
"dRtg": {
"type": "number"
},
"drbPercent": {
"type": "number"
},
"efgPercent": {
"type": "number"
},
"fTr": {
"type": "number"
},
"oRtg": {
"type": "number"
},
"orbPercent": {
"type": "number"
},
"stlPercent": {
"type": "number"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threePAr": {
"type": "number"
},
"tovPercent": {
"type": "number"
},
"trbPercent": {
"type": "number"
},
"tsPercent": {
"type": "number"
}
}
},
"controllers.TeamGameBasicStatDTO": {
"type": "object",
"properties": {
"ast": {
"type": "integer"
},
"blk": {
"type": "integer"
},
"drb": {
"type": "integer"
},
"fg": {
"type": "integer"
},
"fgPercent": {
"type": "number"
},
"fga": {
"type": "integer"
},
"ft": {
"type": "integer"
},
"ftPercent": {
"type": "number"
},
"fta": {
"type": "integer"
},
"orb": {
"type": "integer"
},
"pf": {
"type": "integer"
},
"pts": {
"type": "integer"
},
"stl": {
"type": "integer"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threeP": {
"type": "integer"
},
"threePPercent": {
"type": "number"
},
"threePa": {
"type": "integer"
},
"tov": {
"type": "integer"
},
"trb": {
"type": "integer"
}
}
},
"models.PlayerAdvancedStat": {
"type": "object",
"properties": {
@@ -460,6 +945,9 @@ const docTemplate = `{
}
},
"tags": [
{
"name": "Games"
},
{
"name": "PlayerTotals"
},
+488
View File
@@ -11,6 +11,104 @@
},
"basePath": "/",
"paths": {
"/api/games": {
"get": {
"description": "Returns a paginated list of games with optional filters and included associations.",
"produces": [
"application/json"
],
"tags": [
"Games"
],
"summary": "Get game data",
"parameters": [
{
"type": "string",
"description": "Filter by date (YYYY-MM-DD)",
"name": "date",
"in": "query"
},
{
"type": "string",
"description": "Filter by team abbreviation (e.g., LAL)",
"name": "team",
"in": "query"
},
{
"type": "string",
"description": "Filter by a specific Game ID",
"name": "gameId",
"in": "query"
},
{
"type": "boolean",
"description": "Filter for playoff games",
"name": "isPlayoff",
"in": "query"
},
{
"type": "integer",
"default": 1,
"description": "Page number",
"name": "page",
"in": "query"
},
{
"type": "integer",
"default": 20,
"description": "Page size",
"name": "pageSize",
"in": "query"
},
{
"type": "string",
"default": "date",
"description": "Field to sort by (e.g., date)",
"name": "sortBy",
"in": "query"
},
{
"type": "boolean",
"default": false,
"description": "Sort ascending",
"name": "ascending",
"in": "query"
},
{
"type": "string",
"description": "Comma-separated list of associations to include (e.g., lineScores,playerGameBasicStats,teamGameAdvStats)",
"name": "include",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.GamesResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
}
}
},
"/api/playeradvancedstats": {
"get": {
"description": "Returns filtered and paginated player advanced stats",
@@ -300,6 +398,393 @@
}
}
},
"controllers.GameResponseDTO": {
"type": "object",
"properties": {
"arena": {
"type": "string"
},
"boxScoreUrl": {
"type": "string"
},
"date": {
"type": "string"
},
"gameDuration": {
"type": "string"
},
"gameId": {
"type": "string"
},
"homePts": {
"type": "integer"
},
"homeTeam": {
"type": "string"
},
"id": {
"type": "integer"
},
"isPlayoff": {
"type": "boolean"
},
"lineScores": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.LineScoreDTO"
}
},
"playerGameAdvStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.PlayerGameAdvStatDTO"
}
},
"playerGameBasicStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.PlayerGameBasicStatDTO"
}
},
"startTimeET": {
"type": "string"
},
"teamGameAdvStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.TeamGameAdvStatDTO"
}
},
"teamGameBasicStats": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.TeamGameBasicStatDTO"
}
},
"visitorPts": {
"type": "integer"
},
"visitorTeam": {
"type": "string"
}
}
},
"controllers.GamesResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.GameResponseDTO"
}
},
"pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"total": {
"type": "integer"
}
}
}
}
},
"controllers.LineScoreDTO": {
"type": "object",
"properties": {
"ot1": {
"type": "integer"
},
"ot2": {
"type": "integer"
},
"ot3": {
"type": "integer"
},
"q1": {
"type": "integer"
},
"q2": {
"type": "integer"
},
"q3": {
"type": "integer"
},
"q4": {
"type": "integer"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"total": {
"type": "integer"
}
}
},
"controllers.PlayerGameAdvStatDTO": {
"type": "object",
"properties": {
"astPercent": {
"type": "number"
},
"blkPercent": {
"type": "number"
},
"bpm": {
"type": "number"
},
"dRtg": {
"type": "integer"
},
"drbPercent": {
"type": "number"
},
"efgPercent": {
"type": "number"
},
"fTr": {
"type": "number"
},
"mp": {
"type": "string"
},
"oRtg": {
"type": "integer"
},
"orbPercent": {
"type": "number"
},
"playerId": {
"type": "string"
},
"playerName": {
"type": "string"
},
"stlPercent": {
"type": "number"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threePAr": {
"type": "number"
},
"tovPercent": {
"type": "number"
},
"trbPercent": {
"type": "number"
},
"tsPercent": {
"type": "number"
},
"usgPercent": {
"type": "number"
}
}
},
"controllers.PlayerGameBasicStatDTO": {
"type": "object",
"properties": {
"ast": {
"type": "integer"
},
"blk": {
"type": "integer"
},
"drb": {
"type": "integer"
},
"fg": {
"type": "integer"
},
"fgPercent": {
"type": "number"
},
"fga": {
"type": "integer"
},
"ft": {
"type": "integer"
},
"ftPercent": {
"type": "number"
},
"fta": {
"type": "integer"
},
"gmSc": {
"type": "number"
},
"mp": {
"type": "string"
},
"orb": {
"type": "integer"
},
"pf": {
"type": "integer"
},
"playerId": {
"type": "string"
},
"playerName": {
"type": "string"
},
"plusMinus": {
"type": "integer"
},
"pts": {
"type": "integer"
},
"status": {
"type": "string"
},
"stl": {
"type": "integer"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threeP": {
"type": "integer"
},
"threePPercent": {
"type": "number"
},
"threePa": {
"type": "integer"
},
"tov": {
"type": "integer"
},
"trb": {
"type": "integer"
}
}
},
"controllers.TeamGameAdvStatDTO": {
"type": "object",
"properties": {
"astPercent": {
"type": "number"
},
"blkPercent": {
"type": "number"
},
"dRtg": {
"type": "number"
},
"drbPercent": {
"type": "number"
},
"efgPercent": {
"type": "number"
},
"fTr": {
"type": "number"
},
"oRtg": {
"type": "number"
},
"orbPercent": {
"type": "number"
},
"stlPercent": {
"type": "number"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threePAr": {
"type": "number"
},
"tovPercent": {
"type": "number"
},
"trbPercent": {
"type": "number"
},
"tsPercent": {
"type": "number"
}
}
},
"controllers.TeamGameBasicStatDTO": {
"type": "object",
"properties": {
"ast": {
"type": "integer"
},
"blk": {
"type": "integer"
},
"drb": {
"type": "integer"
},
"fg": {
"type": "integer"
},
"fgPercent": {
"type": "number"
},
"fga": {
"type": "integer"
},
"ft": {
"type": "integer"
},
"ftPercent": {
"type": "number"
},
"fta": {
"type": "integer"
},
"orb": {
"type": "integer"
},
"pf": {
"type": "integer"
},
"pts": {
"type": "integer"
},
"stl": {
"type": "integer"
},
"team": {
"description": "Abbreviation",
"type": "string"
},
"threeP": {
"type": "integer"
},
"threePPercent": {
"type": "number"
},
"threePa": {
"type": "integer"
},
"tov": {
"type": "integer"
},
"trb": {
"type": "integer"
}
}
},
"models.PlayerAdvancedStat": {
"type": "object",
"properties": {
@@ -456,6 +941,9 @@
}
},
"tags": [
{
"name": "Games"
},
{
"name": "PlayerTotals"
},
+325
View File
@@ -18,6 +18,263 @@ definitions:
type: integer
type: object
type: object
controllers.GameResponseDTO:
properties:
arena:
type: string
boxScoreUrl:
type: string
date:
type: string
gameDuration:
type: string
gameId:
type: string
homePts:
type: integer
homeTeam:
type: string
id:
type: integer
isPlayoff:
type: boolean
lineScores:
items:
$ref: '#/definitions/controllers.LineScoreDTO'
type: array
playerGameAdvStats:
items:
$ref: '#/definitions/controllers.PlayerGameAdvStatDTO'
type: array
playerGameBasicStats:
items:
$ref: '#/definitions/controllers.PlayerGameBasicStatDTO'
type: array
startTimeET:
type: string
teamGameAdvStats:
items:
$ref: '#/definitions/controllers.TeamGameAdvStatDTO'
type: array
teamGameBasicStats:
items:
$ref: '#/definitions/controllers.TeamGameBasicStatDTO'
type: array
visitorPts:
type: integer
visitorTeam:
type: string
type: object
controllers.GamesResponse:
properties:
data:
items:
$ref: '#/definitions/controllers.GameResponseDTO'
type: array
pagination:
properties:
page:
type: integer
pageSize:
type: integer
pages:
type: integer
total:
type: integer
type: object
type: object
controllers.LineScoreDTO:
properties:
ot1:
type: integer
ot2:
type: integer
ot3:
type: integer
q1:
type: integer
q2:
type: integer
q3:
type: integer
q4:
type: integer
team:
description: Abbreviation
type: string
total:
type: integer
type: object
controllers.PlayerGameAdvStatDTO:
properties:
astPercent:
type: number
blkPercent:
type: number
bpm:
type: number
dRtg:
type: integer
drbPercent:
type: number
efgPercent:
type: number
fTr:
type: number
mp:
type: string
oRtg:
type: integer
orbPercent:
type: number
playerId:
type: string
playerName:
type: string
stlPercent:
type: number
team:
description: Abbreviation
type: string
threePAr:
type: number
tovPercent:
type: number
trbPercent:
type: number
tsPercent:
type: number
usgPercent:
type: number
type: object
controllers.PlayerGameBasicStatDTO:
properties:
ast:
type: integer
blk:
type: integer
drb:
type: integer
fg:
type: integer
fgPercent:
type: number
fga:
type: integer
ft:
type: integer
ftPercent:
type: number
fta:
type: integer
gmSc:
type: number
mp:
type: string
orb:
type: integer
pf:
type: integer
playerId:
type: string
playerName:
type: string
plusMinus:
type: integer
pts:
type: integer
status:
type: string
stl:
type: integer
team:
description: Abbreviation
type: string
threeP:
type: integer
threePPercent:
type: number
threePa:
type: integer
tov:
type: integer
trb:
type: integer
type: object
controllers.TeamGameAdvStatDTO:
properties:
astPercent:
type: number
blkPercent:
type: number
dRtg:
type: number
drbPercent:
type: number
efgPercent:
type: number
fTr:
type: number
oRtg:
type: number
orbPercent:
type: number
stlPercent:
type: number
team:
description: Abbreviation
type: string
threePAr:
type: number
tovPercent:
type: number
trbPercent:
type: number
tsPercent:
type: number
type: object
controllers.TeamGameBasicStatDTO:
properties:
ast:
type: integer
blk:
type: integer
drb:
type: integer
fg:
type: integer
fgPercent:
type: number
fga:
type: integer
ft:
type: integer
ftPercent:
type: number
fta:
type: integer
orb:
type: integer
pf:
type: integer
pts:
type: integer
stl:
type: integer
team:
description: Abbreviation
type: string
threeP:
type: integer
threePPercent:
type: number
threePa:
type: integer
tov:
type: integer
trb:
type: integer
type: object
models.PlayerAdvancedStat:
properties:
age:
@@ -127,6 +384,73 @@ info:
title: NBA_Go API
version: "1.0"
paths:
/api/games:
get:
description: Returns a paginated list of games with optional filters and included
associations.
parameters:
- description: Filter by date (YYYY-MM-DD)
in: query
name: date
type: string
- description: Filter by team abbreviation (e.g., LAL)
in: query
name: team
type: string
- description: Filter by a specific Game ID
in: query
name: gameId
type: string
- description: Filter for playoff games
in: query
name: isPlayoff
type: boolean
- default: 1
description: Page number
in: query
name: page
type: integer
- default: 20
description: Page size
in: query
name: pageSize
type: integer
- default: date
description: Field to sort by (e.g., date)
in: query
name: sortBy
type: string
- default: false
description: Sort ascending
in: query
name: ascending
type: boolean
- description: Comma-separated list of associations to include (e.g., lineScores,playerGameBasicStats,teamGameAdvStats)
in: query
name: include
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/controllers.GamesResponse'
"400":
description: Bad Request
schema:
additionalProperties:
type: string
type: object
"500":
description: Internal Server Error
schema:
additionalProperties:
type: string
type: object
summary: Get game data
tags:
- Games
/api/playeradvancedstats:
get:
consumes:
@@ -306,6 +630,7 @@ schemes:
- http
swagger: "2.0"
tags:
- name: Games
- name: PlayerTotals
- name: PlayerStats
- name: PlayerShotChart