-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOpenAPI.yml
More file actions
366 lines (347 loc) · 9.27 KB
/
OpenAPI.yml
File metadata and controls
366 lines (347 loc) · 9.27 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
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
openapi: 3.0.3
info:
title: WhatTime App
description: Core API for WhatTime Application
version: '1.0'
servers:
- url: 'http://localhost:8080/api/v1'
description: Local dev
- url: 'http://whattime.ru/api/v1'
description: Production
paths:
/login:
post:
description: Identificate by name
operationId: login
tags:
- auth
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/User"
responses:
'204':
description: No content
headers:
Set-Cookie:
description: >
JSON auth token encoded in Base64
with current user's id and name
schema:
type: string
example: >
AuthToken=eyJpZCI6MSwibmFtZSI6IlZhc3lhIn0==;
Path=/; HttpOnly; Max-Age=100500
default:
$ref: '#/components/responses/ErrorResponse'
/currentUser:
get:
description: Get current user
operationId: getCurrentUser
tags:
- auth
security:
- cookieAuth: []
responses:
'200':
description: Current user has been identified
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'403':
description: Current user has not been identified
default:
$ref: '#/components/responses/ErrorResponse'
/logout:
get:
description: Logout current user
operationId: logout
tags:
- auth
responses:
'204':
description: User has been succesfully logged out
headers:
Set-Cookie:
description: Auth token cookie with age equals to 0
schema:
type: string
default:
$ref: '#/components/responses/ErrorResponse'
/events:
post:
description: Create new event
operationId: createEvent
tags:
- events
security:
- cookieAuth: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
responses:
'201':
description: The event has been created succesfully
headers:
Location:
description: URL of the created event
schema:
type: string
example: http://localhost:8080/events/1
'403':
description: Unidentified user can not create events
default:
$ref: '#/components/responses/ErrorResponse'
/events/{eventId}:
get:
description: Get event by id
operationId: getEventById
tags:
- events
parameters:
- $ref: '#/components/parameters/eventId'
responses:
'200':
description: The event has been found
content:
application/json:
schema:
$ref: '#/components/schemas/Event'
default:
$ref: '#/components/responses/ErrorResponse'
/events/{eventId}/intervals:
post:
description: Post intervals to event
operationId: postIntervals
tags:
- events
security:
- cookieAuth: []
parameters:
- $ref: '#/components/parameters/eventId'
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Interval'
responses:
'204':
description: Intervals have beed posted succesfully
'403':
description: Unidentified user can not post intervals to events
default:
$ref: '#/components/responses/ErrorResponse'
get:
description: Get intervals by event id
operationId: getIntervals
tags:
- events
parameters:
- $ref: '#/components/parameters/eventId'
responses:
'200':
description: Intervals of the event have been found
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Interval'
default:
$ref: '#/components/responses/ErrorResponse'
/events/{eventId}/participants:
get:
description: Get users who voted
operationId: getParticipants
tags:
- events
parameters:
- $ref: '#/components/parameters/eventId'
responses:
'200':
description: The event has been found and the users returned
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
default:
$ref: '#/components/responses/ErrorResponse'
/events/{eventId}/result:
get:
description: Get result of the voting
operationId: getVotingResult
tags:
- events
parameters:
- $ref: '#/components/parameters/eventId'
responses:
'200':
description: The event has been found and the voting result returned
content:
application/json:
schema:
$ref: "#/components/schemas/VotingResult"
default:
$ref: '#/components/responses/ErrorResponse'
components:
securitySchemes:
cookieAuth:
type: apiKey
in: cookie
name: authToken
parameters:
eventId:
name: eventId
in: path
description: ID of an event
required: true
schema:
type: string
responses:
ErrorResponse:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
description: Error info
type: object
properties:
timestamp:
description: Error timestamp with timezone (RFC 3339)
type: string
format: date-time
example: '2022-06-17T10:55:19+00:00'
status:
description: HTTP response status code
type: integer
example: 404
error:
description: HTTP status error message
type: string
example: 'Not Found'
message:
description: Error message
type: string
example: 'User has not been found'
path:
description: The failed request's path
type: string
example: '/notFoundPage'
required:
- timestamp
- status
- path
User:
description: User info
type: object
properties:
name:
description: The user's name
type: string
example: John
id:
description: The user's id
type: string
example: 1
readOnly: true
required:
- name
- id
VotingResult:
description: The result of users' voting at the event
type: object
properties:
event:
$ref: '#/components/schemas/Event'
intervals:
type: array
items:
$ref: '#/components/schemas/ResultInterval'
required:
- event
- intervals
- users
Event:
description: Event info
type: object
properties:
id:
description: UUID of the event
type: string
example: '12da28ba-88b5-4390-992b-5b1e066c07d3'
readOnly: true
title:
description: Title of the event
type: string
example: John's birthday
description:
description: Short description of the event
type: string
example: Bring your own booze.
owner:
allOf:
- $ref: '#/components/schemas/User'
- readOnly: true
createdAt:
description: Time of creation of the event in seconds since the EPOCH
type: integer
example: 1655465889
readOnly: true
required:
- id
- title
- owner
- createdAt
Interval:
description: Interval of time info
type: object
properties:
id:
description: Global ID of the interval
type: integer
example: 7
startTime:
description: Start time of the interval in seconds since the EPOCH
type: integer
example: 1655465889
endTime:
description: End time of the interval in seconds since the EPOCH
type: integer
example: 1655466889
owner:
allOf:
- $ref: '#/components/schemas/User'
- readOnly: true
required:
- startTime
- endTime
ResultInterval:
description: Combined users interval
type: object
properties:
startTime:
description: Start time of the interval in seconds since the EPOCH
type: integer
example: 1655465889
endTime:
description: End time of the interval in seconds since the EPOCH
type: integer
example: 1655466889
owners:
type: array
items:
$ref: '#/components/schemas/User'
required:
- startTime
- endTime