Files

1079 lines
34 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schemes": [
"https",
"http"
],
"swagger": "2.0",
"info": {
"description": "Stats service, now with public access!",
"title": "NBA_Go API",
"contact": {},
"version": "1.0"
},
"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",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"PlayerStats"
],
"summary": "Get player advanced stats",
"parameters": [
{
"type": "integer",
"description": "Season (e.g., 2025)",
"name": "season",
"in": "query"
},
{
"type": "string",
"description": "Team abbreviation (e.g., MIL)",
"name": "team",
"in": "query"
},
{
"type": "string",
"description": "Player ID (e.g., greenaj01)",
"name": "playerId",
"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": "winShares",
"description": "Field to sort by",
"name": "sortBy",
"in": "query"
},
{
"type": "boolean",
"default": false,
"description": "Sort ascending",
"name": "ascending",
"in": "query"
},
{
"type": "boolean",
"description": "Whether playoffs?",
"name": "isPlayoff",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.AdvancedStatsResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
},
"x-order": 2
}
},
"/api/playershotchart": {
"get": {
"description": "Returns a paginated list of shot-chart points, optionally filtered by various parameters.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"PlayerShotChart"
],
"summary": "Get shot-chart data",
"parameters": [
{
"type": "integer",
"description": "Page number for pagination (defaults to 1)",
"name": "page",
"in": "query"
},
{
"type": "string",
"description": "Player ID (e.g., hardeja01)",
"name": "playerId",
"in": "query"
},
{
"type": "integer",
"description": "Season (e.g., 2023)",
"name": "season",
"in": "query"
},
{
"type": "string",
"description": "Game date (e.g., Oct 17, 2018)",
"name": "date",
"in": "query"
},
{
"type": "string",
"description": "Quarter (e.g., 1st Qtr)",
"name": "qtr",
"in": "query"
},
{
"type": "boolean",
"description": "Shot result (true for made, false for missed)",
"name": "result",
"in": "query"
},
{
"type": "string",
"description": "Shot type (e.g., 2-pointer)",
"name": "shot_type",
"in": "query"
},
{
"type": "string",
"description": "Opponent team (e.g., NOP)",
"name": "opponent",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/models.PlayerShotChart"
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
},
"x-order": 3
}
},
"/api/playertotals": {
"get": {
"description": "Filter and paginate player totals",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"PlayerTotals"
],
"summary": "Get player total stats",
"parameters": [
{
"type": "integer",
"description": "Season (e.g. 2000)",
"name": "season",
"in": "query"
},
{
"type": "string",
"description": "Team abbreviation (e.g. LAL)",
"name": "team",
"in": "query"
},
{
"type": "string",
"description": "Player ID (e.g. greenac01)",
"name": "playerId",
"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",
"description": "Field to sort by (e.g. points, assists)",
"name": "sortBy",
"in": "query"
},
{
"type": "boolean",
"description": "Sort ascending (default false)",
"name": "ascending",
"in": "query"
},
{
"type": "boolean",
"description": "Whether the stats are for playoffs",
"name": "isPlayoff",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/controllers.PlayerTotalsResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
}
},
"x-order": 1
}
}
},
"definitions": {
"controllers.AdvancedStatsResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.PlayerAdvancedStatDTO"
}
},
"pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"total": {
"type": "integer"
}
}
}
}
},
"controllers.GameResponseDTO": {
"type": "object",
"properties": {
"arena": {
"type": "string"
},
"date": {
"type": "string"
},
"gameDuration": {
"type": "string"
},
"gameId": {
"description": "ID uint `json:\"id\"`",
"type": "string"
},
"homePts": {
"type": "integer"
},
"homeTeam": {
"type": "string"
},
"isPlayoff": {
"type": "boolean"
},
"lineScores": {
"description": "BoxScoreURL string `json:\"boxScoreUrl\"`",
"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.PlayerAdvancedStatDTO": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"assistPercent": {
"type": "number"
},
"blockPercent": {
"type": "number"
},
"box": {
"type": "number"
},
"defensiveBox": {
"type": "number"
},
"defensiveRBPercent": {
"type": "number"
},
"defensiveWS": {
"type": "number"
},
"ftr": {
"type": "number"
},
"games": {
"type": "integer"
},
"isPlayoff": {
"type": "boolean"
},
"minutesPlayed": {
"type": "integer"
},
"offensiveBox": {
"type": "number"
},
"offensiveRBPercent": {
"type": "number"
},
"offensiveWS": {
"type": "number"
},
"per": {
"type": "number"
},
"playerId": {
"type": "string"
},
"playerName": {
"type": "string"
},
"position": {
"type": "string"
},
"season": {
"type": "integer"
},
"stealPercent": {
"type": "number"
},
"team": {
"type": "string"
},
"threePAR": {
"type": "number"
},
"totalRBPercent": {
"type": "number"
},
"tsPercent": {
"type": "number"
},
"turnoverPercent": {
"type": "number"
},
"usagePercent": {
"type": "number"
},
"vorp": {
"type": "number"
},
"winShares": {
"type": "number"
},
"winSharesPer": {
"type": "number"
}
}
},
"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.PlayerTotalStatDTO": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"assists": {
"type": "integer"
},
"blocks": {
"type": "integer"
},
"defensiveRb": {
"type": "integer"
},
"effectFgPercent": {
"type": "number"
},
"fieldAttempts": {
"type": "integer"
},
"fieldGoals": {
"type": "integer"
},
"fieldPercent": {
"type": "number"
},
"ft": {
"type": "integer"
},
"ftAttempts": {
"type": "integer"
},
"ftPercent": {
"type": "number"
},
"games": {
"type": "integer"
},
"gamesStarted": {
"type": "integer"
},
"isPlayoff": {
"type": "boolean"
},
"minutesPg": {
"type": "number"
},
"offensiveRb": {
"type": "integer"
},
"personalFouls": {
"type": "integer"
},
"playerId": {
"type": "string"
},
"playerName": {
"type": "string"
},
"points": {
"type": "integer"
},
"position": {
"type": "string"
},
"season": {
"type": "integer"
},
"steals": {
"type": "integer"
},
"team": {
"type": "string"
},
"threeAttempts": {
"type": "integer"
},
"threeFg": {
"type": "integer"
},
"threePercent": {
"type": "number"
},
"totalRb": {
"type": "integer"
},
"turnovers": {
"type": "integer"
},
"twoAttempts": {
"type": "integer"
},
"twoFg": {
"type": "integer"
},
"twoPercent": {
"type": "number"
}
}
},
"controllers.PlayerTotalsResponse": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/controllers.PlayerTotalStatDTO"
}
},
"pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"pageSize": {
"type": "integer"
},
"pages": {
"type": "integer"
},
"total": {
"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.PlayerShotChart": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"distanceFt": {
"type": "integer"
},
"id": {
"description": "Autoincrement primary key — works in SQLite and any other DB.",
"type": "integer"
},
"lead": {
"type": "boolean"
},
"left": {
"type": "integer"
},
"opponent": {
"type": "string"
},
"opponentTeamScore": {
"type": "integer"
},
"playerId": {
"description": "────────── \"identity\" columns (the dedup key) ──────────",
"type": "string"
},
"playerName": {
"description": "────────── the rest of the payload ──────────",
"type": "string"
},
"qtr": {
"type": "string"
},
"result": {
"type": "boolean"
},
"season": {
"type": "integer"
},
"shotType": {
"type": "string"
},
"team": {
"type": "string"
},
"teamScore": {
"type": "integer"
},
"timeRemaining": {
"type": "string"
},
"top": {
"type": "integer"
}
}
}
},
"tags": [
{
"name": "Games"
},
{
"name": "PlayerTotals"
},
{
"name": "PlayerStats"
},
{
"name": "PlayerShotChart"
}
]
}