-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgolf-api-schema.yml
More file actions
245 lines (244 loc) · 7.86 KB
/
golf-api-schema.yml
File metadata and controls
245 lines (244 loc) · 7.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
openapi: 3.0.0
info:
title: Golf Tournament API
version: 1.0.0
description: API for managing golf tournament scoring and leaderboard
servers:
-
url: http://localhost:8080
description: Local development server
paths:
/api/tournament:
get:
tags:
- Tournament
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Tournament'
description: Tournament details
'404':
description: No tournament exists
operationId: getTournament
summary: Get current tournament details
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TournamentCreate'
required: true
tags:
- Tournament
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Tournament'
description: Tournament created
'409':
description: Tournament already exists
operationId: createTournament
summary: Create new tournament (only one can exist at a time)
/api/players:
get:
tags:
- Players
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Player'
description: List of players
operationId: listPlayers
summary: List all players
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PlayerCreate'
required: true
tags:
- Players
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Player'
description: Player created
operationId: createPlayer
summary: Register a new player
/api/scores:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ScoreSubmission'
required: true
tags:
- Scores
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Score'
description: Score recorded
'404':
description: No tournament exists or player not found
operationId: submitScore
summary: Submit score for a hole
/api/leaderboard:
get:
tags:
- Leaderboard
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Leaderboard'
description: Current leaderboard
'404':
description: No tournament exists
operationId: getLeaderboard
summary: Get current leaderboard
components:
schemas:
Tournament:
type: object
properties:
id:
format: uuid
type: string
coursePars:
description: Array of par values for each hole (must be 18 holes)
type: array
items:
type: integer
totalPar:
type: integer
example: 72
TournamentCreate:
required:
- coursePars
type: object
properties:
coursePars:
description: Array of par values for each hole
maxItems: 18
minItems: 18
type: array
items:
type: integer
example: [4,5,3,4,5,4,4,3,4,4,4,4,4,5,4,3,5,3]
Player:
type: object
properties:
id:
format: uuid
type: string
name:
type: string
holesCompleted:
maximum: 18
minimum: 0
type: integer
relativeToPar:
description: Current score relative to par (negative is under par)
type: integer
PlayerCreate:
required:
- name
type: object
properties:
name:
type: string
Score:
type: object
properties:
playerId:
format: uuid
type: string
holeNumber:
maximum: 18
minimum: 1
type: integer
strokes:
minimum: 1
type: integer
relativeToPar:
description: Score relative to par for this hole (negative is under par)
type: integer
ScoreSubmission:
required:
- playerId
- holeNumber
- strokes
type: object
properties:
playerId:
format: uuid
type: string
holeNumber:
maximum: 18
minimum: 1
type: integer
strokes:
minimum: 1
type: integer
Leaderboard:
type: object
properties:
lastUpdated:
format: date-time
type: string
players:
type: array
items:
$ref: '#/components/schemas/LeaderboardEntry'
LeaderboardEntry:
type: object
properties:
position:
type: integer
playerId:
format: uuid
type: string
playerName:
type: string
holesCompleted:
maximum: 18
minimum: 0
type: integer
relativeToPar:
description: Score relative to par ('E' for even, or +/- number)
type: string
parOfPlayedHoles:
description: The total par value of played holes
type: integer
currentScore:
description: The current running score for played holes
type: integer
tags:
-
name: Tournament
description: Tournament management operations
-
name: Players
description: Player management operations
-
name: Scores
description: Score tracking operations
-
name: Leaderboard
description: Leaderboard operations