-
Notifications
You must be signed in to change notification settings - Fork 2
/
swagger.yaml
571 lines (565 loc) · 14.8 KB
/
swagger.yaml
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
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
swagger: '2.0'
info:
version: '1.0.0'
title: 'Events Microservice'
description: 'Microservice for creating, retrieving, updating, and deleting events.'
contact:
name: Jarrod Parkes
email: jarrod@udacity.com
url: http://jarrodparkes.com
license:
name: MIT License
schemes:
- https
consumes:
- application/json
produces:
- application/json
paths:
/events:
get:
description: List events.
summary: List events.
parameters:
- name: page_size
in: query
description: Number of events returned. Limit is 50.
type: integer
default: 10
- name: page_number
in: query
description: Page number.
type: integer
default: 1
- name: filter
in: body
description: Properties for filtering search.
required: true
schema:
type: object
properties:
id:
type: array
description: IDs of events to filter.
items:
type: string
default: "3"
required:
- id
responses:
200:
description: Successful response.
schema:
type: array
items:
$ref: '#/definitions/GetEvent'
401:
$ref: "#/responses/Unauthorized"
security:
- Public: []
- JWT: []
post:
description: Create a new event.
summary: Create a new event.
parameters:
- name: event
in: body
description: Data for a new event.
required: true
schema:
$ref: '#/definitions/PostEvent'
responses:
201:
description: Event created.
schema:
$ref: '#/definitions/Message'
304:
$ref: "#/responses/NotModified"
400:
description: Bad request.
schema:
$ref: '#/definitions/Message'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
/events/search:
get:
description: List events based on a distance from a location.
summary: List events based on a distance from a location.
parameters:
- name: page_size
in: query
description: Number of events returned. Limit is 50.
type: integer
default: 10
- name: page_number
in: query
description: Page number.
type: integer
default: 1
- name: distance
in: query
description: Distance in miles.
type: integer
default: 25
- name: latitude
in: query
type: number
format: double
description: Signed latitude without compass direction [-90, 90]. Negative indicates south, positive indicates north.
default: 37.7749
- name: longitude
in: query
type: number
format: double
description: Signed longitude without compass direction [-180, 180]. Negative indicates west, positive indicates east.
default: -122.4194
responses:
200:
description: Successful response.
schema:
type: array
items:
$ref: '#/definitions/GetEvent'
401:
$ref: "#/responses/Unauthorized"
security:
- Public: []
- JWT: []
/events/schedule:
get:
description: List and filter the current user's events.
summary: List and filter the current user's events.
parameters:
- name: page_size
in: query
description: Number of events returned. Limit is 50.
type: integer
default: 10
- name: page_number
in: query
description: Page number.
type: integer
default: 1
- name: type
in: query
type: string
description: Type of events to filter (upcoming|past).
default: "upcoming"
responses:
200:
description: Successful response.
schema:
type: array
items:
$ref: '#/definitions/GetEvent'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
/events/{id}:
get:
description: Get information about an event.
summary: Get information about an event.
parameters:
- name: id
in: path
description: ID of event to fetch.
required: true
type: integer
format: int64
responses:
200:
description: Successful response.
schema:
$ref: '#/definitions/GetEvent'
401:
$ref: "#/responses/Unauthorized"
404:
$ref: "#/responses/NotFound"
security:
- Public: []
- JWT: []
put:
description: Update an event.
summary: Update an event.
parameters:
- name: id
in: path
description: ID of event to fetch.
required: true
type: integer
format: int64
- name: event
in: body
description: Data to update an existing event.
required: true
schema:
$ref: '#/definitions/PutEvent'
responses:
200:
description: Event updated.
schema:
$ref: '#/definitions/Message'
304:
$ref: "#/responses/NotModified"
400:
description: Bad request.
schema:
$ref: '#/definitions/Message'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
delete:
description: Delete an event.
summary: Delete an event.
parameters:
- name: id
in: path
description: ID of event to delete.
required: true
type: integer
format: int64
responses:
204:
description: Event deleted.
schema:
$ref: '#/definitions/Message'
304:
$ref: "#/responses/NotModified"
400:
description: Bad request.
schema:
$ref: '#/definitions/Message'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
/events/rsvps:
get:
description: List the current user's RSVPs.
summary: List the current user's RSVPs.
parameters:
- name: page_size
in: query
description: Number of events returned. Limit is 50.
type: integer
default: 10
- name: page_number
in: query
description: Page number.
type: integer
default: 1
responses:
200:
description: Successful response.
schema:
type: array
items:
$ref: '#/definitions/RSVP'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
/events/{id}/rsvps:
get:
description: List RSVPs for an event.
summary: List RSVPs for an event.
parameters:
- name: id
in: path
description: ID of event to fetch RSVPs.
required: true
type: integer
format: int64
responses:
200:
description: Successful response.
schema:
type: array
items:
$ref: '#/definitions/RSVP'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
post:
description: Create RSVPs for an event.
summary: Create RSVPs for an event.
parameters:
- name: id
in: path
description: ID of event to create RSVPs.
required: true
type: integer
format: int64
- name: invite_users
in: body
description: Users to invite.
required: true
schema:
$ref: '#/definitions/InviteUsers'
responses:
201:
description: Users invited.
schema:
$ref: '#/definitions/Message'
304:
$ref: "#/responses/NotModified"
400:
description: Bad request.
schema:
$ref: '#/definitions/Message'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
/events/{id}/rsvps/{rsvp_id}:
put:
description: Update an RSVP for an event.
summary: Update an RSVP for an event.
parameters:
- name: id
in: path
description: ID of event.
required: true
type: integer
format: int64
- name: rsvp_id
in: path
description: ID of RSVP to update.
required: true
type: integer
format: int64
- name: rsvp_response
in: body
description: Response to RSVP.
required: true
schema:
$ref: '#/definitions/RSVPResponse'
responses:
200:
description: RSVP updated.
schema:
$ref: '#/definitions/Message'
304:
$ref: "#/responses/NotModified"
400:
description: Bad request.
schema:
$ref: '#/definitions/Message'
401:
$ref: "#/responses/Unauthorized"
security:
- JWT: []
responses:
NoContent:
description: The request was fulfilled, but nothing to return.
BadRequest:
description: Invalid request.
NotModified:
description: The specified resource was not modified.
NotFound:
description: The specified resource was not found.
Unauthorized:
description: Unauthorized.
securityDefinitions:
Public:
type: basic
description: A public endpoint. Only public data is returned. No username or password is required.
JWT:
type: apiKey
description: A Base64-encoded JSON web token.
name: "Authorization: Bearer"
in: header
definitions:
GetEvent:
allOf:
- $ref: '#/definitions/ResponseEvent'
- required:
- id
properties:
id:
type: string
description: ID of event.
readOnly: true
default: "1"
PostEvent:
allOf:
- $ref: '#/definitions/BaseEvent'
- type: object
properties:
activities:
type: array
description: IDs of activities for event.
readOnly: true
items:
type: string
default: "3"
invite_users:
type: array
description: IDs of users to invite to event.
readOnly: true
items:
type: string
default: "4"
required:
- activities
- invite_users
PutEvent:
allOf:
- $ref: '#/definitions/BaseEvent'
- type: object
properties:
activities:
type: array
description: IDs of activities for event.
readOnly: true
items:
type: string
default: "3"
required:
- activities
InviteUsers:
type: object
properties:
invite_users:
type: array
description: IDs of users to invite to event.
readOnly: true
items:
type: string
default: "4"
required:
- invite_users
ResponseEvent:
allOf:
- $ref: '#/definitions/BaseEvent'
- type: object
properties:
rsvps:
type: array
description: RSVPs for event.
readOnly: true
items:
$ref: '#/definitions/RSVP'
activities:
type: array
description: IDs of activities for event.
readOnly: true
items:
type: string
default: "3"
required:
- rsvps
- activities
BaseEvent:
type: object
properties:
name:
type: string
description: Name of event.
default: "Game night at Angela's"
emoji:
type: string
description: Emoji representing event.
default: "💥"
description:
type: string
description: Description of event.
default: "It's that time again. Trivial Pursuit and Monopoly."
host:
type: string
description: ID of user hosting event.
default: "1"
start_time:
type: string
description: Start time of event.
format: YYYY-mm-dd HH:mm:ss
default: "2017-07-24 20:43:51"
location:
type: string
description: Location of event.
default: "San Francisco"
latitude:
type: number
format: double
description: Latitude of event. Signed latitude without compass direction [-90, 90]. Negative indicates south, positive indicates north.
default: 37.7749
longitude:
type: number
format: double
description: Longitude of event. Signed longitude without compass direction [-180, 180]. Negative indicates west, positive indicates east.
default: -122.4194
is_public:
type: boolean
description: Is the event public? If false, it's private.
default: false
created_at:
type: string
description: Date event was created.
format: YYYY-mm-dd HH:mm:ss
default: "2017-07-24 20:43:51"
updated_at:
type: string
description: Date event was created.
format: YYYY-mm-dd HH:mm:ss
default: "2017-07-24 20:43:51"
required:
- name
- emoji
- description
- host
- start_time
- location
- latitude
- longitude
- is_public
- updated_at
- created_at
RSVP:
type: object
properties:
user_id:
type: integer
description: User's ID.
default: "1"
accepted:
type: boolean
description: Is the user coming to the event?
default: true
comment:
type: string
description: Response to RSVP.
default: "I'm coming"
required:
- user_id
- accepted
- comment
RSVPResponse:
type: object
properties:
accepted:
type: boolean
description: True to accept RSVP. False to decline RSVP.
comment:
type: string
description: Describe response to RSVP.
required:
- accepted
- comment
default:
accepted: true
description: "I'm coming!"
Message:
type: object
properties:
message:
type: string
description: A message.
required:
- message
default:
message: "A message describing the HTTP status code."