java-explore-with-me

Форк
0
/
ewm-main-service-spec.json 
2836 строк · 104.1 Кб
1
{
2
  "openapi": "3.0.1",
3
  "info": {
4
    "description": "Documentation \"Explore With Me\" API v1.0",
5
    "title": "\"Explore With Me\" API сервер",
6
    "version": "1.0"
7
  },
8
  "servers": [
9
    {
10
      "description": "Generated server url",
11
      "url": "http://localhost:8080"
12
    }
13
  ],
14
  "tags": [
15
    {
16
      "description": "Публичный API для работы с подборками событий",
17
      "name": "Public: Подборки событий"
18
    },
19
    {
20
      "description": "API для работы с категориями",
21
      "name": "Admin: Категории"
22
    },
23
    {
24
      "description": "Закрытый API для работы с событиями",
25
      "name": "Private: События"
26
    },
27
    {
28
      "description": "Публичный API для работы с категориями",
29
      "name": "Public: Категории"
30
    },
31
    {
32
      "description": "API для работы с событиями",
33
      "name": "Admin: События"
34
    },
35
    {
36
      "description": "Публичный API для работы с событиями",
37
      "name": "Public: События"
38
    },
39
    {
40
      "description": "Закрытый API для работы с запросами текущего пользователя на участие в событиях",
41
      "name": "Private: Запросы на участие"
42
    },
43
    {
44
      "description": "API для работы с пользователями",
45
      "name": "Admin: Пользователи"
46
    },
47
    {
48
      "description": "API для работы с подборками событий",
49
      "name": "Admin: Подборки событий"
50
    }
51
  ],
52
  "paths": {
53
    "/admin/categories": {
54
      "post": {
55
        "description": "Обратите внимание: имя категории должно быть уникальным",
56
        "operationId": "addCategory",
57
        "requestBody": {
58
          "content": {
59
            "application/json": {
60
              "schema": {
61
                "$ref": "#/components/schemas/NewCategoryDto"
62
              }
63
            }
64
          },
65
          "description": "данные добавляемой категории",
66
          "required": true
67
        },
68
        "responses": {
69
          "201": {
70
            "content": {
71
              "application/json": {
72
                "schema": {
73
                  "$ref": "#/components/schemas/CategoryDto"
74
                }
75
              }
76
            },
77
            "description": "Категория добавлена"
78
          },
79
          "400": {
80
            "content": {
81
              "application/json": {
82
                "example": {
83
                  "status": "BAD_REQUEST",
84
                  "reason": "Incorrectly made request.",
85
                  "message": "Field: name. Error: must not be blank. Value: null",
86
                  "timestamp": "2022-09-07 09:10:50"
87
                },
88
                "schema": {
89
                  "$ref": "#/components/schemas/ApiError"
90
                }
91
              }
92
            },
93
            "description": "Запрос составлен некорректно"
94
          },
95
          "409": {
96
            "content": {
97
              "application/json": {
98
                "example": {
99
                  "status": "CONFLICT",
100
                  "reason": "Integrity constraint has been violated.",
101
                  "message": "could not execute statement; SQL [n/a]; constraint [uq_category_name]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
102
                  "timestamp": "2022-09-07 09:10:50"
103
                },
104
                "schema": {
105
                  "$ref": "#/components/schemas/ApiError"
106
                }
107
              }
108
            },
109
            "description": "Нарушение целостности данных"
110
          }
111
        },
112
        "summary": "Добавление новой категории",
113
        "tags": [
114
          "Admin: Категории"
115
        ]
116
      }
117
    },
118
    "/admin/categories/{catId}": {
119
      "delete": {
120
        "description": "Обратите внимание: с категорией не должно быть связано ни одного события.",
121
        "operationId": "deleteCategory",
122
        "parameters": [
123
          {
124
            "description": "id категории",
125
            "in": "path",
126
            "name": "catId",
127
            "required": true,
128
            "schema": {
129
              "type": "integer",
130
              "format": "int64"
131
            }
132
          }
133
        ],
134
        "responses": {
135
          "204": {
136
            "description": "Категория удалена"
137
          },
138
          "404": {
139
            "content": {
140
              "application/json": {
141
                "example": {
142
                  "status": "NOT_FOUND",
143
                  "reason": "The required object was not found.",
144
                  "message": "Category with id=27 was not found",
145
                  "timestamp": "2022-09-07 09:10:50"
146
                },
147
                "schema": {
148
                  "$ref": "#/components/schemas/ApiError"
149
                }
150
              }
151
            },
152
            "description": "Категория не найдена или недоступна"
153
          },
154
          "409": {
155
            "content": {
156
              "application/json": {
157
                "example": {
158
                  "status": "CONFLICT",
159
                  "reason": "For the requested operation the conditions are not met.",
160
                  "message": "The category is not empty",
161
                  "timestamp": "2023-01-21 16:56:19"
162
                },
163
                "schema": {
164
                  "$ref": "#/components/schemas/ApiError"
165
                }
166
              }
167
            },
168
            "description": "Существуют события, связанные с категорией"
169
          }
170
        },
171
        "summary": "Удаление категории",
172
        "tags": [
173
          "Admin: Категории"
174
        ]
175
      },
176
      "patch": {
177
        "description": "Обратите внимание: имя категории должно быть уникальным",
178
        "operationId": "updateCategory",
179
        "parameters": [
180
          {
181
            "description": "id категории",
182
            "in": "path",
183
            "name": "catId",
184
            "required": true,
185
            "schema": {
186
              "type": "integer",
187
              "format": "int64"
188
            }
189
          }
190
        ],
191
        "requestBody": {
192
          "content": {
193
            "application/json": {
194
              "schema": {
195
                "$ref": "#/components/schemas/CategoryDto"
196
              }
197
            }
198
          },
199
          "description": "Данные категории для изменения",
200
          "required": true
201
        },
202
        "responses": {
203
          "200": {
204
            "content": {
205
              "application/json": {
206
                "schema": {
207
                  "$ref": "#/components/schemas/CategoryDto"
208
                }
209
              }
210
            },
211
            "description": "Данные категории изменены"
212
          },
213
          "404": {
214
            "content": {
215
              "application/json": {
216
                "example": {
217
                  "status": "NOT_FOUND",
218
                  "reason": "The required object was not found.",
219
                  "message": "Category with id=27 was not found",
220
                  "timestamp": "2022-09-07 09:10:50"
221
                },
222
                "schema": {
223
                  "$ref": "#/components/schemas/ApiError"
224
                }
225
              }
226
            },
227
            "description": "Категория не найдена или недоступна"
228
          },
229
          "409": {
230
            "content": {
231
              "application/json": {
232
                "example": {
233
                  "status": "CONFLICT",
234
                  "reason": "Integrity constraint has been violated.",
235
                  "message": "could not execute statement; SQL [n/a]; constraint [uq_category_name]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
236
                  "timestamp": "2022-09-07 09:10:50"
237
                },
238
                "schema": {
239
                  "$ref": "#/components/schemas/ApiError"
240
                }
241
              }
242
            },
243
            "description": "Нарушение целостности данных"
244
          }
245
        },
246
        "summary": "Изменение категории",
247
        "tags": [
248
          "Admin: Категории"
249
        ]
250
      }
251
    },
252
    "/admin/compilations": {
253
      "post": {
254
        "operationId": "saveCompilation",
255
        "requestBody": {
256
          "content": {
257
            "application/json": {
258
              "schema": {
259
                "$ref": "#/components/schemas/NewCompilationDto"
260
              }
261
            }
262
          },
263
          "description": "данные новой подборки",
264
          "required": true
265
        },
266
        "responses": {
267
          "201": {
268
            "content": {
269
              "application/json": {
270
                "schema": {
271
                  "$ref": "#/components/schemas/CompilationDto"
272
                }
273
              }
274
            },
275
            "description": "Подборка добавлена"
276
          },
277
          "400": {
278
            "content": {
279
              "application/json": {
280
                "example": {
281
                  "status": "BAD_REQUEST",
282
                  "reason": "Incorrectly made request.",
283
                  "message": "Field: title. Error: must not be blank. Value: null",
284
                  "timestamp": "2022-09-07 09:10:50"
285
                },
286
                "schema": {
287
                  "$ref": "#/components/schemas/ApiError"
288
                }
289
              }
290
            },
291
            "description": "Запрос составлен некорректно"
292
          },
293
          "409": {
294
            "content": {
295
              "application/json": {
296
                "example": {
297
                  "status": "CONFLICT",
298
                  "reason": "Integrity constraint has been violated.",
299
                  "message": "could not execute statement; SQL [n/a]; constraint [uq_compilation_name]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
300
                  "timestamp": "2022-09-07 09:10:50"
301
                },
302
                "schema": {
303
                  "$ref": "#/components/schemas/ApiError"
304
                }
305
              }
306
            },
307
            "description": "Нарушение целостности данных"
308
          }
309
        },
310
        "summary": "Добавление новой подборки (подборка может не содержать событий)",
311
        "tags": [
312
          "Admin: Подборки событий"
313
        ]
314
      }
315
    },
316
    "/admin/compilations/{compId}": {
317
      "delete": {
318
        "operationId": "deleteCompilation",
319
        "parameters": [
320
          {
321
            "description": "id подборки",
322
            "in": "path",
323
            "name": "compId",
324
            "required": true,
325
            "schema": {
326
              "type": "integer",
327
              "format": "int64"
328
            }
329
          }
330
        ],
331
        "responses": {
332
          "204": {
333
            "description": "Подборка удалена"
334
          },
335
          "404": {
336
            "content": {
337
              "application/json": {
338
                "example": {
339
                  "status": "NOT_FOUND",
340
                  "reason": "The required object was not found.",
341
                  "message": "Compilation with id=11 was not found",
342
                  "timestamp": "2022-09-07 09:10:50"
343
                },
344
                "schema": {
345
                  "$ref": "#/components/schemas/ApiError"
346
                }
347
              }
348
            },
349
            "description": "Подборка не найдена или недоступна"
350
          }
351
        },
352
        "summary": "Удаление подборки",
353
        "tags": [
354
          "Admin: Подборки событий"
355
        ]
356
      },
357
      "patch": {
358
        "operationId": "updateCompilation",
359
        "parameters": [
360
          {
361
            "description": "id подборки",
362
            "in": "path",
363
            "name": "compId",
364
            "required": true,
365
            "schema": {
366
              "type": "integer",
367
              "format": "int64"
368
            }
369
          }
370
        ],
371
        "requestBody": {
372
          "content": {
373
            "application/json": {
374
              "schema": {
375
                "$ref": "#/components/schemas/UpdateCompilationRequest"
376
              }
377
            }
378
          },
379
          "description": "данные для обновления подборки",
380
          "required": true
381
        },
382
        "responses": {
383
          "200": {
384
            "content": {
385
              "application/json": {
386
                "schema": {
387
                  "$ref": "#/components/schemas/CompilationDto"
388
                }
389
              }
390
            },
391
            "description": "Подборка обновлена"
392
          },
393
          "404": {
394
            "content": {
395
              "application/json": {
396
                "example": {
397
                  "status": "NOT_FOUND",
398
                  "reason": "The required object was not found.",
399
                  "message": "Category with id=27 was not found",
400
                  "timestamp": "2022-09-07 09:10:50"
401
                },
402
                "schema": {
403
                  "$ref": "#/components/schemas/ApiError"
404
                }
405
              }
406
            },
407
            "description": "Подборка не найдена или недоступна"
408
          }
409
        },
410
        "summary": "Обновить информацию о подборке",
411
        "tags": [
412
          "Admin: Подборки событий"
413
        ]
414
      }
415
    },
416
    "/admin/events": {
417
      "get": {
418
        "description": "Эндпоинт возвращает полную информацию обо всех событиях подходящих под переданные условия\n\nВ случае, если по заданным фильтрам не найдено ни одного события, возвращает пустой список",
419
        "operationId": "getEvents_2",
420
        "parameters": [
421
          {
422
            "description": "список id пользователей, чьи события нужно найти",
423
            "in": "query",
424
            "name": "users",
425
            "required": false,
426
            "schema": {
427
              "type": "array",
428
              "items": {
429
                "type": "integer",
430
                "format": "int64"
431
              }
432
            }
433
          },
434
          {
435
            "description": "список состояний в которых находятся искомые события",
436
            "in": "query",
437
            "name": "states",
438
            "required": false,
439
            "schema": {
440
              "type": "array",
441
              "items": {
442
                "type": "string"
443
              }
444
            }
445
          },
446
          {
447
            "description": "список id категорий в которых будет вестись поиск",
448
            "in": "query",
449
            "name": "categories",
450
            "required": false,
451
            "schema": {
452
              "type": "array",
453
              "items": {
454
                "type": "integer",
455
                "format": "int64"
456
              }
457
            }
458
          },
459
          {
460
            "description": "дата и время не раньше которых должно произойти событие",
461
            "in": "query",
462
            "name": "rangeStart",
463
            "required": false,
464
            "schema": {
465
              "type": "string"
466
            }
467
          },
468
          {
469
            "description": "дата и время не позже которых должно произойти событие",
470
            "in": "query",
471
            "name": "rangeEnd",
472
            "required": false,
473
            "schema": {
474
              "type": "string"
475
            }
476
          },
477
          {
478
            "description": "количество событий, которые нужно пропустить для формирования текущего набора",
479
            "in": "query",
480
            "name": "from",
481
            "required": false,
482
            "schema": {
483
              "minimum": 0,
484
              "type": "integer",
485
              "format": "int32",
486
              "default": 0
487
            }
488
          },
489
          {
490
            "description": "количество событий в наборе",
491
            "in": "query",
492
            "name": "size",
493
            "required": false,
494
            "schema": {
495
              "type": "integer",
496
              "format": "int32",
497
              "default": 10
498
            }
499
          }
500
        ],
501
        "responses": {
502
          "200": {
503
            "content": {
504
              "application/json": {
505
                "schema": {
506
                  "type": "array",
507
                  "items": {
508
                    "$ref": "#/components/schemas/EventFullDto"
509
                  }
510
                }
511
              }
512
            },
513
            "description": "События найдены"
514
          },
515
          "400": {
516
            "content": {
517
              "application/json": {
518
                "example": {
519
                  "status": "BAD_REQUEST",
520
                  "reason": "Incorrectly made request.",
521
                  "message": "Failed to convert value of type java.lang.String to required type int; nested exception is java.lang.NumberFormatException: For input string: ad",
522
                  "timestamp": "2022-09-07 09:10:50"
523
                },
524
                "schema": {
525
                  "$ref": "#/components/schemas/ApiError"
526
                }
527
              }
528
            },
529
            "description": "Запрос составлен некорректно"
530
          }
531
        },
532
        "summary": "Поиск событий",
533
        "tags": [
534
          "Admin: События"
535
        ]
536
      }
537
    },
538
    "/admin/events/{eventId}": {
539
      "patch": {
540
        "description": "Редактирование данных любого события администратором. Валидация данных не требуется.\nОбратите внимание:\n - дата начала изменяемого события должна быть не ранее чем за час от даты публикации. (Ожидается код ошибки 409)\n- событие можно публиковать, только если оно в состоянии ожидания публикации (Ожидается код ошибки 409)\n- событие можно отклонить, только если оно еще не опубликовано (Ожидается код ошибки 409)",
541
        "operationId": "updateEvent_1",
542
        "parameters": [
543
          {
544
            "description": "id события",
545
            "in": "path",
546
            "name": "eventId",
547
            "required": true,
548
            "schema": {
549
              "type": "integer",
550
              "format": "int64"
551
            }
552
          }
553
        ],
554
        "requestBody": {
555
          "content": {
556
            "application/json": {
557
              "schema": {
558
                "$ref": "#/components/schemas/UpdateEventAdminRequest"
559
              }
560
            }
561
          },
562
          "description": "Данные для изменения информации о событии",
563
          "required": true
564
        },
565
        "responses": {
566
          "200": {
567
            "content": {
568
              "application/json": {
569
                "schema": {
570
                  "$ref": "#/components/schemas/EventFullDto"
571
                }
572
              }
573
            },
574
            "description": "Событие отредактировано"
575
          },
576
          "404": {
577
            "content": {
578
              "application/json": {
579
                "example": {
580
                  "status": "NOT_FOUND",
581
                  "reason": "The required object was not found.",
582
                  "message": "Event with id=2 was not found",
583
                  "timestamp": "2022-09-07 09:10:50"
584
                },
585
                "schema": {
586
                  "$ref": "#/components/schemas/ApiError"
587
                }
588
              }
589
            },
590
            "description": "Событие не найдено или недоступно"
591
          },
592
          "409": {
593
            "content": {
594
              "application/json": {
595
                "example": {
596
                  "status": "FORBIDDEN",
597
                  "reason": "For the requested operation the conditions are not met.",
598
                  "message": "Cannot publish the event because it's not in the right state: PUBLISHED",
599
                  "timestamp": "2022-09-07 09:10:50"
600
                },
601
                "schema": {
602
                  "$ref": "#/components/schemas/ApiError"
603
                }
604
              }
605
            },
606
            "description": "Событие не удовлетворяет правилам редактирования"
607
          }
608
        },
609
        "summary": "Редактирование данных события и его статуса (отклонение/публикация).",
610
        "tags": [
611
          "Admin: События"
612
        ]
613
      }
614
    },
615
    "/admin/users": {
616
      "get": {
617
        "description": "Возвращает информацию обо всех пользователях (учитываются параметры ограничения выборки), либо о конкретных (учитываются указанные идентификаторы)\n\nВ случае, если по заданным фильтрам не найдено ни одного пользователя, возвращает пустой список",
618
        "operationId": "getUsers",
619
        "parameters": [
620
          {
621
            "description": "id пользователей",
622
            "in": "query",
623
            "name": "ids",
624
            "required": false,
625
            "schema": {
626
              "type": "array",
627
              "items": {
628
                "type": "integer",
629
                "format": "int64"
630
              }
631
            }
632
          },
633
          {
634
            "description": "количество элементов, которые нужно пропустить для формирования текущего набора",
635
            "in": "query",
636
            "name": "from",
637
            "required": false,
638
            "schema": {
639
              "minimum": 0,
640
              "type": "integer",
641
              "format": "int32",
642
              "default": 0
643
            }
644
          },
645
          {
646
            "description": "количество элементов в наборе",
647
            "in": "query",
648
            "name": "size",
649
            "required": false,
650
            "schema": {
651
              "type": "integer",
652
              "format": "int32",
653
              "default": 10
654
            }
655
          }
656
        ],
657
        "responses": {
658
          "200": {
659
            "content": {
660
              "application/json": {
661
                "schema": {
662
                  "type": "array",
663
                  "items": {
664
                    "$ref": "#/components/schemas/UserDto"
665
                  }
666
                }
667
              }
668
            },
669
            "description": "Пользователи найдены"
670
          },
671
          "400": {
672
            "content": {
673
              "application/json": {
674
                "example": {
675
                  "status": "BAD_REQUEST",
676
                  "reason": "Incorrectly made request.",
677
                  "message": "Failed to convert value of type java.lang.String to required type int; nested exception is java.lang.NumberFormatException: For input string: ad",
678
                  "timestamp": "2022-09-07 09:10:50"
679
                },
680
                "schema": {
681
                  "$ref": "#/components/schemas/ApiError"
682
                }
683
              }
684
            },
685
            "description": "Запрос составлен некорректно"
686
          }
687
        },
688
        "summary": "Получение информации о пользователях",
689
        "tags": [
690
          "Admin: Пользователи"
691
        ]
692
      },
693
      "post": {
694
        "operationId": "registerUser",
695
        "requestBody": {
696
          "content": {
697
            "application/json": {
698
              "schema": {
699
                "$ref": "#/components/schemas/NewUserRequest"
700
              }
701
            }
702
          },
703
          "description": "Данные добавляемого пользователя",
704
          "required": true
705
        },
706
        "responses": {
707
          "201": {
708
            "content": {
709
              "application/json": {
710
                "schema": {
711
                  "$ref": "#/components/schemas/UserDto"
712
                }
713
              }
714
            },
715
            "description": "Пользователь зарегистрирован"
716
          },
717
          "400": {
718
            "content": {
719
              "application/json": {
720
                "example": {
721
                  "status": "BAD_REQUEST",
722
                  "reason": "Incorrectly made request.",
723
                  "message": "Field: name. Error: must not be blank. Value: null",
724
                  "timestamp": "2022-09-07 09:10:50"
725
                },
726
                "schema": {
727
                  "$ref": "#/components/schemas/ApiError"
728
                }
729
              }
730
            },
731
            "description": "Запрос составлен некорректно"
732
          },
733
          "409": {
734
            "content": {
735
              "application/json": {
736
                "example": {
737
                  "status": "CONFLICT",
738
                  "reason": "Integrity constraint has been violated.",
739
                  "message": "could not execute statement; SQL [n/a]; constraint [uq_email]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
740
                  "timestamp": "2022-09-07 09:10:50"
741
                },
742
                "schema": {
743
                  "$ref": "#/components/schemas/ApiError"
744
                }
745
              }
746
            },
747
            "description": "Нарушение целостности данных"
748
          }
749
        },
750
        "summary": "Добавление нового пользователя",
751
        "tags": [
752
          "Admin: Пользователи"
753
        ]
754
      }
755
    },
756
    "/admin/users/{userId}": {
757
      "delete": {
758
        "operationId": "delete",
759
        "parameters": [
760
          {
761
            "description": "id пользователя",
762
            "in": "path",
763
            "name": "userId",
764
            "required": true,
765
            "schema": {
766
              "type": "integer",
767
              "format": "int64"
768
            }
769
          }
770
        ],
771
        "responses": {
772
          "204": {
773
            "description": "Пользователь удален"
774
          },
775
          "404": {
776
            "content": {
777
              "application/json": {
778
                "example": {
779
                  "status": "NOT_FOUND",
780
                  "reason": "The required object was not found.",
781
                  "message": "User with id=555 was not found",
782
                  "timestamp": "2022-09-07 09:10:50"
783
                },
784
                "schema": {
785
                  "$ref": "#/components/schemas/ApiError"
786
                }
787
              }
788
            },
789
            "description": "Пользователь не найден или недоступен"
790
          }
791
        },
792
        "summary": "Удаление пользователя",
793
        "tags": [
794
          "Admin: Пользователи"
795
        ]
796
      }
797
    },
798
    "/categories": {
799
      "get": {
800
        "description": "В случае, если по заданным фильтрам не найдено ни одной категории, возвращает пустой список",
801
        "operationId": "getCategories",
802
        "parameters": [
803
          {
804
            "description": "количество категорий, которые нужно пропустить для формирования текущего набора",
805
            "in": "query",
806
            "name": "from",
807
            "required": false,
808
            "schema": {
809
              "minimum": 0,
810
              "type": "integer",
811
              "format": "int32",
812
              "default": 0
813
            }
814
          },
815
          {
816
            "description": "количество категорий в наборе",
817
            "in": "query",
818
            "name": "size",
819
            "required": false,
820
            "schema": {
821
              "type": "integer",
822
              "format": "int32",
823
              "default": 10
824
            }
825
          }
826
        ],
827
        "responses": {
828
          "200": {
829
            "content": {
830
              "application/json": {
831
                "schema": {
832
                  "type": "array",
833
                  "items": {
834
                    "$ref": "#/components/schemas/CategoryDto"
835
                  }
836
                }
837
              }
838
            },
839
            "description": "Категории найдены"
840
          },
841
          "400": {
842
            "content": {
843
              "application/json": {
844
                "example": {
845
                  "status": "BAD_REQUEST",
846
                  "reason": "Incorrectly made request.",
847
                  "message": "Failed to convert value of type java.lang.String to required type int; nested exception is java.lang.NumberFormatException: For input string: ad",
848
                  "timestamp": "2022-09-07 09:10:50"
849
                },
850
                "schema": {
851
                  "$ref": "#/components/schemas/ApiError"
852
                }
853
              }
854
            },
855
            "description": "Запрос составлен некорректно"
856
          }
857
        },
858
        "summary": "Получение категорий",
859
        "tags": [
860
          "Public: Категории"
861
        ]
862
      }
863
    },
864
    "/categories/{catId}": {
865
      "get": {
866
        "description": "В случае, если категории с заданным id не найдено, возвращает статус код 404",
867
        "operationId": "getCategory",
868
        "parameters": [
869
          {
870
            "description": "id категории",
871
            "in": "path",
872
            "name": "catId",
873
            "required": true,
874
            "schema": {
875
              "type": "integer",
876
              "format": "int64"
877
            }
878
          }
879
        ],
880
        "responses": {
881
          "200": {
882
            "content": {
883
              "application/json": {
884
                "schema": {
885
                  "$ref": "#/components/schemas/CategoryDto"
886
                }
887
              }
888
            },
889
            "description": "Категория найдена"
890
          },
891
          "400": {
892
            "content": {
893
              "application/json": {
894
                "example": {
895
                  "status": "BAD_REQUEST",
896
                  "reason": "Incorrectly made request.",
897
                  "message": "Failed to convert value of type java.lang.String to required type long; nested exception is java.lang.NumberFormatException: For input string: ad",
898
                  "timestamp": "2022-09-07 09:10:50"
899
                },
900
                "schema": {
901
                  "$ref": "#/components/schemas/ApiError"
902
                }
903
              }
904
            },
905
            "description": "Запрос составлен некорректно"
906
          },
907
          "404": {
908
            "content": {
909
              "application/json": {
910
                "example": {
911
                  "status": "NOT_FOUND",
912
                  "reason": "The required object was not found.",
913
                  "message": "Category with id=19 was not found",
914
                  "timestamp": "2022-09-07 09:10:50"
915
                },
916
                "schema": {
917
                  "$ref": "#/components/schemas/ApiError"
918
                }
919
              }
920
            },
921
            "description": "Категория не найдена или недоступна"
922
          }
923
        },
924
        "summary": "Получение информации о категории по её идентификатору",
925
        "tags": [
926
          "Public: Категории"
927
        ]
928
      }
929
    },
930
    "/compilations": {
931
      "get": {
932
        "description": "В случае, если по заданным фильтрам не найдено ни одной подборки, возвращает пустой список",
933
        "operationId": "getCompilations",
934
        "parameters": [
935
          {
936
            "description": "искать только закрепленные/не закрепленные подборки",
937
            "in": "query",
938
            "name": "pinned",
939
            "required": false,
940
            "schema": {
941
              "type": "boolean"
942
            }
943
          },
944
          {
945
            "description": "количество элементов, которые нужно пропустить для формирования текущего набора",
946
            "in": "query",
947
            "name": "from",
948
            "required": false,
949
            "schema": {
950
              "minimum": 0,
951
              "type": "integer",
952
              "format": "int32",
953
              "default": 0
954
            }
955
          },
956
          {
957
            "description": "количество элементов в наборе",
958
            "in": "query",
959
            "name": "size",
960
            "required": false,
961
            "schema": {
962
              "type": "integer",
963
              "format": "int32",
964
              "default": 10
965
            }
966
          }
967
        ],
968
        "responses": {
969
          "200": {
970
            "content": {
971
              "application/json": {
972
                "schema": {
973
                  "type": "array",
974
                  "items": {
975
                    "$ref": "#/components/schemas/CompilationDto"
976
                  }
977
                }
978
              }
979
            },
980
            "description": "Найдены подборки событий"
981
          },
982
          "400": {
983
            "content": {
984
              "application/json": {
985
                "example": {
986
                  "status": "BAD_REQUEST",
987
                  "reason": "Incorrectly made request.",
988
                  "message": "Failed to convert value of type java.lang.String to required type int; nested exception is java.lang.NumberFormatException: For input string: ad",
989
                  "timestamp": "2022-09-07 09:10:50"
990
                },
991
                "schema": {
992
                  "$ref": "#/components/schemas/ApiError"
993
                }
994
              }
995
            },
996
            "description": "Запрос составлен некорректно"
997
          }
998
        },
999
        "summary": "Получение подборок событий",
1000
        "tags": [
1001
          "Public: Подборки событий"
1002
        ]
1003
      }
1004
    },
1005
    "/compilations/{compId}": {
1006
      "get": {
1007
        "description": "В случае, если подборки с заданным id не найдено, возвращает статус код 404",
1008
        "operationId": "getCompilation",
1009
        "parameters": [
1010
          {
1011
            "description": "id подборки",
1012
            "in": "path",
1013
            "name": "compId",
1014
            "required": true,
1015
            "schema": {
1016
              "type": "integer",
1017
              "format": "int64"
1018
            }
1019
          }
1020
        ],
1021
        "responses": {
1022
          "200": {
1023
            "content": {
1024
              "application/json": {
1025
                "schema": {
1026
                  "$ref": "#/components/schemas/CompilationDto"
1027
                }
1028
              }
1029
            },
1030
            "description": "Подборка событий найдена"
1031
          },
1032
          "400": {
1033
            "content": {
1034
              "application/json": {
1035
                "example": {
1036
                  "status": "BAD_REQUEST",
1037
                  "reason": "Incorrectly made request.",
1038
                  "message": "Failed to convert value of type java.lang.String to required type long; nested exception is java.lang.NumberFormatException: For input string: ad",
1039
                  "timestamp": "2022-09-07 09:10:50"
1040
                },
1041
                "schema": {
1042
                  "$ref": "#/components/schemas/ApiError"
1043
                }
1044
              }
1045
            },
1046
            "description": "Запрос составлен некорректно"
1047
          },
1048
          "404": {
1049
            "content": {
1050
              "application/json": {
1051
                "example": {
1052
                  "status": "NOT_FOUND",
1053
                  "reason": "The required object was not found.",
1054
                  "message": "Compilation with id=84 was not found",
1055
                  "timestamp": "2022-09-07 09:10:50"
1056
                },
1057
                "schema": {
1058
                  "$ref": "#/components/schemas/ApiError"
1059
                }
1060
              }
1061
            },
1062
            "description": "Подборка не найдена или недоступна"
1063
          }
1064
        },
1065
        "summary": "Получение подборки событий по его id",
1066
        "tags": [
1067
          "Public: Подборки событий"
1068
        ]
1069
      }
1070
    },
1071
    "/events": {
1072
      "get": {
1073
        "description": "Обратите внимание: \n- это публичный эндпоинт, соответственно в выдаче должны быть только опубликованные события\n- текстовый поиск (по аннотации и подробному описанию) должен быть без учета регистра букв\n- если в запросе не указан диапазон дат [rangeStart-rangeEnd], то нужно выгружать события, которые произойдут позже текущей даты и времени\n- информация о каждом событии должна включать в себя количество просмотров и количество уже одобренных заявок на участие\n- информацию о том, что по этому эндпоинту был осуществлен и обработан запрос, нужно сохранить в сервисе статистики\n\nВ случае, если по заданным фильтрам не найдено ни одного события, возвращает пустой список",
1074
        "operationId": "getEvents_1",
1075
        "parameters": [
1076
          {
1077
            "description": "текст для поиска в содержимом аннотации и подробном описании события",
1078
            "in": "query",
1079
            "name": "text",
1080
            "required": false,
1081
            "schema": {
1082
              "maxLength": 7000,
1083
              "minLength": 1,
1084
              "type": "string"
1085
            }
1086
          },
1087
          {
1088
            "description": "список идентификаторов категорий в которых будет вестись поиск",
1089
            "in": "query",
1090
            "name": "categories",
1091
            "required": false,
1092
            "schema": {
1093
              "type": "array",
1094
              "items": {
1095
                "type": "integer",
1096
                "format": "int64"
1097
              }
1098
            }
1099
          },
1100
          {
1101
            "description": "поиск только платных/бесплатных событий",
1102
            "in": "query",
1103
            "name": "paid",
1104
            "required": false,
1105
            "schema": {
1106
              "type": "boolean"
1107
            }
1108
          },
1109
          {
1110
            "description": "дата и время не раньше которых должно произойти событие",
1111
            "in": "query",
1112
            "name": "rangeStart",
1113
            "required": false,
1114
            "schema": {
1115
              "type": "string"
1116
            }
1117
          },
1118
          {
1119
            "description": "дата и время не позже которых должно произойти событие",
1120
            "in": "query",
1121
            "name": "rangeEnd",
1122
            "required": false,
1123
            "schema": {
1124
              "type": "string"
1125
            }
1126
          },
1127
          {
1128
            "description": "только события у которых не исчерпан лимит запросов на участие",
1129
            "in": "query",
1130
            "name": "onlyAvailable",
1131
            "required": false,
1132
            "schema": {
1133
              "type": "boolean",
1134
              "default": false
1135
            }
1136
          },
1137
          {
1138
            "description": "Вариант сортировки: по дате события или по количеству просмотров",
1139
            "in": "query",
1140
            "name": "sort",
1141
            "required": false,
1142
            "schema": {
1143
              "type": "string",
1144
              "enum": [
1145
                "EVENT_DATE",
1146
                "VIEWS"
1147
              ]
1148
            }
1149
          },
1150
          {
1151
            "description": "количество событий, которые нужно пропустить для формирования текущего набора",
1152
            "in": "query",
1153
            "name": "from",
1154
            "required": false,
1155
            "schema": {
1156
              "minimum": 0,
1157
              "type": "integer",
1158
              "format": "int32",
1159
              "default": 0
1160
            }
1161
          },
1162
          {
1163
            "description": "количество событий в наборе",
1164
            "in": "query",
1165
            "name": "size",
1166
            "required": false,
1167
            "schema": {
1168
              "type": "integer",
1169
              "format": "int32",
1170
              "default": 10
1171
            }
1172
          }
1173
        ],
1174
        "responses": {
1175
          "200": {
1176
            "content": {
1177
              "application/json": {
1178
                "schema": {
1179
                  "type": "array",
1180
                  "items": {
1181
                    "$ref": "#/components/schemas/EventShortDto"
1182
                  }
1183
                }
1184
              }
1185
            },
1186
            "description": "События найдены"
1187
          },
1188
          "400": {
1189
            "content": {
1190
              "application/json": {
1191
                "example": {
1192
                  "status": "BAD_REQUEST",
1193
                  "reason": "Incorrectly made request.",
1194
                  "message": "Event must be published",
1195
                  "timestamp": "2022-09-07 09:10:50"
1196
                },
1197
                "schema": {
1198
                  "$ref": "#/components/schemas/ApiError"
1199
                }
1200
              }
1201
            },
1202
            "description": "Запрос составлен некорректно"
1203
          }
1204
        },
1205
        "summary": "Получение событий с возможностью фильтрации",
1206
        "tags": [
1207
          "Public: События"
1208
        ]
1209
      }
1210
    },
1211
    "/events/{id}": {
1212
      "get": {
1213
        "description": "Обратите внимание:\n- событие должно быть опубликовано\n- информация о событии должна включать в себя количество просмотров и количество подтвержденных запросов\n- информацию о том, что по этому эндпоинту был осуществлен и обработан запрос, нужно сохранить в сервисе статистики\n\nВ случае, если события с заданным id не найдено, возвращает статус код 404",
1214
        "operationId": "getEvent_1",
1215
        "parameters": [
1216
          {
1217
            "description": "id события",
1218
            "in": "path",
1219
            "name": "id",
1220
            "required": true,
1221
            "schema": {
1222
              "type": "integer",
1223
              "format": "int64"
1224
            }
1225
          }
1226
        ],
1227
        "responses": {
1228
          "200": {
1229
            "content": {
1230
              "application/json": {
1231
                "schema": {
1232
                  "$ref": "#/components/schemas/EventFullDto"
1233
                }
1234
              }
1235
            },
1236
            "description": "Событие найдено"
1237
          },
1238
          "400": {
1239
            "content": {
1240
              "application/json": {
1241
                "example": {
1242
                  "status": "BAD_REQUEST",
1243
                  "reason": "Incorrectly made request.",
1244
                  "message": "Failed to convert value of type java.lang.String to required type int; nested exception is java.lang.NumberFormatException: For input string: ad",
1245
                  "timestamp": "2022-09-07 09:10:50"
1246
                },
1247
                "schema": {
1248
                  "$ref": "#/components/schemas/ApiError"
1249
                }
1250
              }
1251
            },
1252
            "description": "Запрос составлен некорректно"
1253
          },
1254
          "404": {
1255
            "content": {
1256
              "application/json": {
1257
                "example": {
1258
                  "status": "NOT_FOUND",
1259
                  "reason": "The required object was not found.",
1260
                  "message": "Event with id=13 was not found",
1261
                  "timestamp": "2022-09-07 09:10:50"
1262
                },
1263
                "schema": {
1264
                  "$ref": "#/components/schemas/ApiError"
1265
                }
1266
              }
1267
            },
1268
            "description": "Событие не найдено или недоступно"
1269
          }
1270
        },
1271
        "summary": "Получение подробной информации об опубликованном событии по его идентификатору",
1272
        "tags": [
1273
          "Public: События"
1274
        ]
1275
      }
1276
    },
1277
    "/users/{userId}/events": {
1278
      "get": {
1279
        "description": "В случае, если по заданным фильтрам не найдено ни одного события, возвращает пустой список",
1280
        "operationId": "getEvents",
1281
        "parameters": [
1282
          {
1283
            "description": "id текущего пользователя",
1284
            "in": "path",
1285
            "name": "userId",
1286
            "required": true,
1287
            "schema": {
1288
              "type": "integer",
1289
              "format": "int64"
1290
            }
1291
          },
1292
          {
1293
            "description": "количество элементов, которые нужно пропустить для формирования текущего набора",
1294
            "in": "query",
1295
            "name": "from",
1296
            "required": false,
1297
            "schema": {
1298
              "minimum": 0,
1299
              "type": "integer",
1300
              "format": "int32",
1301
              "default": 0
1302
            }
1303
          },
1304
          {
1305
            "description": "количество элементов в наборе",
1306
            "in": "query",
1307
            "name": "size",
1308
            "required": false,
1309
            "schema": {
1310
              "type": "integer",
1311
              "format": "int32",
1312
              "default": 10
1313
            }
1314
          }
1315
        ],
1316
        "responses": {
1317
          "200": {
1318
            "content": {
1319
              "application/json": {
1320
                "schema": {
1321
                  "type": "array",
1322
                  "items": {
1323
                    "$ref": "#/components/schemas/EventShortDto"
1324
                  }
1325
                }
1326
              }
1327
            },
1328
            "description": "События найдены"
1329
          },
1330
          "400": {
1331
            "content": {
1332
              "application/json": {
1333
                "example": {
1334
                  "status": "BAD_REQUEST",
1335
                  "reason": "Incorrectly made request.",
1336
                  "message": "Failed to convert value of type java.lang.String to required type int; nested exception is java.lang.NumberFormatException: For input string: ad",
1337
                  "timestamp": "2022-09-07 09:10:50"
1338
                },
1339
                "schema": {
1340
                  "$ref": "#/components/schemas/ApiError"
1341
                }
1342
              }
1343
            },
1344
            "description": "Запрос составлен некорректно"
1345
          }
1346
        },
1347
        "summary": "Получение событий, добавленных текущим пользователем",
1348
        "tags": [
1349
          "Private: События"
1350
        ]
1351
      },
1352
      "post": {
1353
        "description": "Обратите внимание: дата и время на которые намечено событие не может быть раньше, чем через два часа от текущего момента",
1354
        "operationId": "addEvent",
1355
        "parameters": [
1356
          {
1357
            "description": "id текущего пользователя",
1358
            "in": "path",
1359
            "name": "userId",
1360
            "required": true,
1361
            "schema": {
1362
              "type": "integer",
1363
              "format": "int64"
1364
            }
1365
          }
1366
        ],
1367
        "requestBody": {
1368
          "content": {
1369
            "application/json": {
1370
              "schema": {
1371
                "$ref": "#/components/schemas/NewEventDto"
1372
              }
1373
            }
1374
          },
1375
          "description": "данные добавляемого события",
1376
          "required": true
1377
        },
1378
        "responses": {
1379
          "201": {
1380
            "content": {
1381
              "application/json": {
1382
                "schema": {
1383
                  "$ref": "#/components/schemas/EventFullDto"
1384
                }
1385
              }
1386
            },
1387
            "description": "Событие добавлено"
1388
          },
1389
          "400": {
1390
            "content": {
1391
              "application/json": {
1392
                "example": {
1393
                  "status": "BAD_REQUEST",
1394
                  "reason": "Incorrectly made request.",
1395
                  "message": "Field: category. Error: must not be blank. Value: null",
1396
                  "timestamp": "2022-09-07 09:10:50"
1397
                },
1398
                "schema": {
1399
                  "$ref": "#/components/schemas/ApiError"
1400
                }
1401
              }
1402
            },
1403
            "description": "Запрос составлен некорректно"
1404
          },
1405
          "409": {
1406
            "content": {
1407
              "application/json": {
1408
                "example": {
1409
                  "status": "FORBIDDEN",
1410
                  "reason": "For the requested operation the conditions are not met.",
1411
                  "message": "Field: eventDate. Error: должно содержать дату, которая еще не наступила. Value: 2020-12-31T15:10:05",
1412
                  "timestamp": "2022-09-07 09:10:50"
1413
                },
1414
                "schema": {
1415
                  "$ref": "#/components/schemas/ApiError"
1416
                }
1417
              }
1418
            },
1419
            "description": "Событие не удовлетворяет правилам создания"
1420
          }
1421
        },
1422
        "summary": "Добавление нового события",
1423
        "tags": [
1424
          "Private: События"
1425
        ]
1426
      }
1427
    },
1428
    "/users/{userId}/events/{eventId}": {
1429
      "get": {
1430
        "description": "В случае, если события с заданным id не найдено, возвращает статус код 404",
1431
        "operationId": "getEvent",
1432
        "parameters": [
1433
          {
1434
            "description": "id текущего пользователя",
1435
            "in": "path",
1436
            "name": "userId",
1437
            "required": true,
1438
            "schema": {
1439
              "type": "integer",
1440
              "format": "int64"
1441
            }
1442
          },
1443
          {
1444
            "description": "id события",
1445
            "in": "path",
1446
            "name": "eventId",
1447
            "required": true,
1448
            "schema": {
1449
              "type": "integer",
1450
              "format": "int64"
1451
            }
1452
          }
1453
        ],
1454
        "responses": {
1455
          "200": {
1456
            "content": {
1457
              "application/json": {
1458
                "schema": {
1459
                  "$ref": "#/components/schemas/EventFullDto"
1460
                }
1461
              }
1462
            },
1463
            "description": "Событие найдено"
1464
          },
1465
          "400": {
1466
            "content": {
1467
              "application/json": {
1468
                "example": {
1469
                  "status": "BAD_REQUEST",
1470
                  "reason": "Incorrectly made request.",
1471
                  "message": "Failed to convert value of type java.lang.String to required type long; nested exception is java.lang.NumberFormatException: For input string: ad",
1472
                  "timestamp": "2022-09-07 09:10:50"
1473
                },
1474
                "schema": {
1475
                  "$ref": "#/components/schemas/ApiError"
1476
                }
1477
              }
1478
            },
1479
            "description": "Запрос составлен некорректно"
1480
          },
1481
          "404": {
1482
            "content": {
1483
              "application/json": {
1484
                "example": {
1485
                  "status": "NOT_FOUND",
1486
                  "reason": "The required object was not found.",
1487
                  "message": "Event with id=13 was not found",
1488
                  "timestamp": "2022-09-07 09:10:50"
1489
                },
1490
                "schema": {
1491
                  "$ref": "#/components/schemas/ApiError"
1492
                }
1493
              }
1494
            },
1495
            "description": "Событие не найдено или недоступно"
1496
          }
1497
        },
1498
        "summary": "Получение полной информации о событии добавленном текущим пользователем",
1499
        "tags": [
1500
          "Private: События"
1501
        ]
1502
      },
1503
      "patch": {
1504
        "description": "Обратите внимание:\n- изменить можно только отмененные события или события в состоянии ожидания модерации (Ожидается код ошибки 409)\n- дата и время на которые намечено событие не может быть раньше, чем через два часа от текущего момента (Ожидается код ошибки 409)\n",
1505
        "operationId": "updateEvent",
1506
        "parameters": [
1507
          {
1508
            "description": "id текущего пользователя",
1509
            "in": "path",
1510
            "name": "userId",
1511
            "required": true,
1512
            "schema": {
1513
              "type": "integer",
1514
              "format": "int64"
1515
            }
1516
          },
1517
          {
1518
            "description": "id редактируемого события",
1519
            "in": "path",
1520
            "name": "eventId",
1521
            "required": true,
1522
            "schema": {
1523
              "type": "integer",
1524
              "format": "int64"
1525
            }
1526
          }
1527
        ],
1528
        "requestBody": {
1529
          "content": {
1530
            "application/json": {
1531
              "schema": {
1532
                "$ref": "#/components/schemas/UpdateEventUserRequest"
1533
              }
1534
            }
1535
          },
1536
          "description": "Новые данные события",
1537
          "required": true
1538
        },
1539
        "responses": {
1540
          "200": {
1541
            "content": {
1542
              "application/json": {
1543
                "schema": {
1544
                  "$ref": "#/components/schemas/EventFullDto"
1545
                }
1546
              }
1547
            },
1548
            "description": "Событие обновлено"
1549
          },
1550
          "400": {
1551
            "content": {
1552
              "application/json": {
1553
                "example": {
1554
                  "status": "BAD_REQUEST",
1555
                  "reason": "Incorrectly made request.",
1556
                  "message": "Event must not be published",
1557
                  "timestamp": "2022-09-07 09:10:50"
1558
                },
1559
                "schema": {
1560
                  "$ref": "#/components/schemas/ApiError"
1561
                }
1562
              }
1563
            },
1564
            "description": "Запрос составлен некорректно"
1565
          },
1566
          "404": {
1567
            "content": {
1568
              "application/json": {
1569
                "example": {
1570
                  "status": "NOT_FOUND",
1571
                  "reason": "The required object was not found.",
1572
                  "message": "Event with id=283 was not found",
1573
                  "timestamp": "2022-09-07 09:10:50"
1574
                },
1575
                "schema": {
1576
                  "$ref": "#/components/schemas/ApiError"
1577
                }
1578
              }
1579
            },
1580
            "description": "Событие не найдено или недоступно"
1581
          },
1582
          "409": {
1583
            "content": {
1584
              "application/json": {
1585
                "example": {
1586
                  "status": "FORBIDDEN",
1587
                  "reason": "For the requested operation the conditions are not met.",
1588
                  "message": "Only pending or canceled events can be changed",
1589
                  "timestamp": "2022-09-07 09:10:50"
1590
                },
1591
                "schema": {
1592
                  "$ref": "#/components/schemas/ApiError"
1593
                }
1594
              }
1595
            },
1596
            "description": "Событие не удовлетворяет правилам редактирования"
1597
          }
1598
        },
1599
        "summary": "Изменение события добавленного текущим пользователем",
1600
        "tags": [
1601
          "Private: События"
1602
        ]
1603
      }
1604
    },
1605
    "/users/{userId}/events/{eventId}/requests": {
1606
      "get": {
1607
        "description": "В случае, если по заданным фильтрам не найдено ни одной заявки, возвращает пустой список",
1608
        "operationId": "getEventParticipants",
1609
        "parameters": [
1610
          {
1611
            "description": "id текущего пользователя",
1612
            "in": "path",
1613
            "name": "userId",
1614
            "required": true,
1615
            "schema": {
1616
              "type": "integer",
1617
              "format": "int64"
1618
            }
1619
          },
1620
          {
1621
            "description": "id события",
1622
            "in": "path",
1623
            "name": "eventId",
1624
            "required": true,
1625
            "schema": {
1626
              "type": "integer",
1627
              "format": "int64"
1628
            }
1629
          }
1630
        ],
1631
        "responses": {
1632
          "200": {
1633
            "content": {
1634
              "application/json": {
1635
                "schema": {
1636
                  "type": "array",
1637
                  "items": {
1638
                    "$ref": "#/components/schemas/ParticipationRequestDto"
1639
                  }
1640
                }
1641
              }
1642
            },
1643
            "description": "Найдены запросы на участие"
1644
          },
1645
          "400": {
1646
            "content": {
1647
              "application/json": {
1648
                "example": {
1649
                  "status": "BAD_REQUEST",
1650
                  "reason": "Incorrectly made request.",
1651
                  "message": "Failed to convert value of type java.lang.String to required type int; nested exception is java.lang.NumberFormatException: For input string: ad",
1652
                  "timestamp": "2022-09-07 09:10:50"
1653
                },
1654
                "schema": {
1655
                  "$ref": "#/components/schemas/ApiError"
1656
                }
1657
              }
1658
            },
1659
            "description": "Запрос составлен некорректно"
1660
          }
1661
        },
1662
        "summary": "Получение информации о запросах на участие в событии текущего пользователя",
1663
        "tags": [
1664
          "Private: События"
1665
        ]
1666
      },
1667
      "patch": {
1668
        "description": "Обратите внимание:\n- если для события лимит заявок равен 0 или отключена пре-модерация заявок, то подтверждение заявок не требуется\n- нельзя подтвердить заявку, если уже достигнут лимит по заявкам на данное событие (Ожидается код ошибки 409)\n- статус можно изменить только у заявок, находящихся в состоянии ожидания (Ожидается код ошибки 409)\n- если при подтверждении данной заявки, лимит заявок для события исчерпан, то все неподтверждённые заявки необходимо отклонить",
1669
        "operationId": "changeRequestStatus",
1670
        "parameters": [
1671
          {
1672
            "description": "id текущего пользователя",
1673
            "in": "path",
1674
            "name": "userId",
1675
            "required": true,
1676
            "schema": {
1677
              "type": "integer",
1678
              "format": "int64"
1679
            }
1680
          },
1681
          {
1682
            "description": "id события текущего пользователя",
1683
            "in": "path",
1684
            "name": "eventId",
1685
            "required": true,
1686
            "schema": {
1687
              "type": "integer",
1688
              "format": "int64"
1689
            }
1690
          }
1691
        ],
1692
        "requestBody": {
1693
          "content": {
1694
            "application/json": {
1695
              "schema": {
1696
                "$ref": "#/components/schemas/EventRequestStatusUpdateRequest"
1697
              }
1698
            }
1699
          },
1700
          "description": "Новый статус для заявок на участие в событии текущего пользователя",
1701
          "required": true
1702
        },
1703
        "responses": {
1704
          "200": {
1705
            "content": {
1706
              "application/json": {
1707
                "schema": {
1708
                  "$ref": "#/components/schemas/EventRequestStatusUpdateResult"
1709
                }
1710
              }
1711
            },
1712
            "description": "Статус заявок изменён"
1713
          },
1714
          "400": {
1715
            "content": {
1716
              "application/json": {
1717
                "example": {
1718
                  "status": "BAD_REQUEST",
1719
                  "reason": "Incorrectly made request.",
1720
                  "message": "Request must have status PENDING",
1721
                  "timestamp": "2022-09-07 09:10:50"
1722
                },
1723
                "schema": {
1724
                  "$ref": "#/components/schemas/ApiError"
1725
                }
1726
              }
1727
            },
1728
            "description": "Запрос составлен некорректно"
1729
          },
1730
          "404": {
1731
            "content": {
1732
              "application/json": {
1733
                "example": {
1734
                  "status": "NOT_FOUND",
1735
                  "reason": "The required object was not found.",
1736
                  "message": "Event with id=321 was not found",
1737
                  "timestamp": "2022-09-07 09:10:50"
1738
                },
1739
                "schema": {
1740
                  "$ref": "#/components/schemas/ApiError"
1741
                }
1742
              }
1743
            },
1744
            "description": "Событие не найдено или недоступно"
1745
          },
1746
          "409": {
1747
            "content": {
1748
              "application/json": {
1749
                "example": {
1750
                  "status": "CONFLICT",
1751
                  "reason": "For the requested operation the conditions are not met.",
1752
                  "message": "The participant limit has been reached",
1753
                  "timestamp": "2022-09-07 09:10:50"
1754
                },
1755
                "schema": {
1756
                  "$ref": "#/components/schemas/ApiError"
1757
                }
1758
              }
1759
            },
1760
            "description": "Достигнут лимит одобренных заявок"
1761
          }
1762
        },
1763
        "summary": "Изменение статуса (подтверждена, отменена) заявок на участие в событии текущего пользователя",
1764
        "tags": [
1765
          "Private: События"
1766
        ]
1767
      }
1768
    },
1769
    "/users/{userId}/requests": {
1770
      "get": {
1771
        "description": "В случае, если по заданным фильтрам не найдено ни одной заявки, возвращает пустой список",
1772
        "operationId": "getUserRequests",
1773
        "parameters": [
1774
          {
1775
            "description": "id текущего пользователя",
1776
            "in": "path",
1777
            "name": "userId",
1778
            "required": true,
1779
            "schema": {
1780
              "type": "integer",
1781
              "format": "int64"
1782
            }
1783
          }
1784
        ],
1785
        "responses": {
1786
          "200": {
1787
            "content": {
1788
              "application/json": {
1789
                "schema": {
1790
                  "type": "array",
1791
                  "items": {
1792
                    "$ref": "#/components/schemas/ParticipationRequestDto"
1793
                  }
1794
                }
1795
              }
1796
            },
1797
            "description": "Найдены запросы на участие"
1798
          },
1799
          "400": {
1800
            "content": {
1801
              "application/json": {
1802
                "example": {
1803
                  "status": "BAD_REQUEST",
1804
                  "reason": "Incorrectly made request.",
1805
                  "message": "Failed to convert value of type java.lang.String to required type long; nested exception is java.lang.NumberFormatException: For input string: ad",
1806
                  "timestamp": "2022-09-07 09:10:50"
1807
                },
1808
                "schema": {
1809
                  "$ref": "#/components/schemas/ApiError"
1810
                }
1811
              }
1812
            },
1813
            "description": "Запрос составлен некорректно"
1814
          },
1815
          "404": {
1816
            "content": {
1817
              "application/json": {
1818
                "example": {
1819
                  "status": "NOT_FOUND",
1820
                  "reason": "The required object was not found.",
1821
                  "message": "User with id=11 was not found",
1822
                  "timestamp": "2022-09-07 09:10:50"
1823
                },
1824
                "schema": {
1825
                  "$ref": "#/components/schemas/ApiError"
1826
                }
1827
              }
1828
            },
1829
            "description": "Пользователь не найден"
1830
          }
1831
        },
1832
        "summary": "Получение информации о заявках текущего пользователя на участие в чужих событиях",
1833
        "tags": [
1834
          "Private: Запросы на участие"
1835
        ]
1836
      },
1837
      "post": {
1838
        "description": "Обратите внимание:\n- нельзя добавить повторный запрос  (Ожидается код ошибки 409)\n- инициатор события не может добавить запрос на участие в своём событии (Ожидается код ошибки 409)\n- нельзя участвовать в неопубликованном событии (Ожидается код ошибки 409)\n- если у события достигнут лимит запросов на участие - необходимо вернуть ошибку  (Ожидается код ошибки 409)\n- если для события отключена пре-модерация запросов на участие, то запрос должен автоматически перейти в состояние подтвержденного",
1839
        "operationId": "addParticipationRequest",
1840
        "parameters": [
1841
          {
1842
            "description": "id текущего пользователя",
1843
            "in": "path",
1844
            "name": "userId",
1845
            "required": true,
1846
            "schema": {
1847
              "type": "integer",
1848
              "format": "int64"
1849
            }
1850
          },
1851
          {
1852
            "description": "id события",
1853
            "in": "query",
1854
            "name": "eventId",
1855
            "required": true,
1856
            "schema": {
1857
              "type": "integer",
1858
              "format": "int64"
1859
            }
1860
          }
1861
        ],
1862
        "responses": {
1863
          "201": {
1864
            "content": {
1865
              "application/json": {
1866
                "schema": {
1867
                  "$ref": "#/components/schemas/ParticipationRequestDto"
1868
                }
1869
              }
1870
            },
1871
            "description": "Заявка создана"
1872
          },
1873
          "400": {
1874
            "content": {
1875
              "application/json": {
1876
                "example": {
1877
                  "status": "BAD_REQUEST",
1878
                  "reason": "Incorrectly made request.",
1879
                  "message": "Failed to convert value of type java.lang.String to required type long; nested exception is java.lang.NumberFormatException: For input string: ad",
1880
                  "timestamp": "2022-09-07 09:10:50"
1881
                },
1882
                "schema": {
1883
                  "$ref": "#/components/schemas/ApiError"
1884
                }
1885
              }
1886
            },
1887
            "description": "Запрос составлен некорректно"
1888
          },
1889
          "404": {
1890
            "content": {
1891
              "application/json": {
1892
                "example": {
1893
                  "status": "NOT_FOUND",
1894
                  "reason": "The required object was not found.",
1895
                  "message": "Event with id=13 was not found",
1896
                  "timestamp": "2022-09-07 09:10:50"
1897
                },
1898
                "schema": {
1899
                  "$ref": "#/components/schemas/ApiError"
1900
                }
1901
              }
1902
            },
1903
            "description": "Событие не найдено или недоступно"
1904
          },
1905
          "409": {
1906
            "content": {
1907
              "application/json": {
1908
                "example": {
1909
                  "status": "CONFLICT",
1910
                  "reason": "Integrity constraint has been violated.",
1911
                  "message": "could not execute statement; SQL [n/a]; constraint [uq_request]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
1912
                  "timestamp": "2022-09-07 09:10:50"
1913
                },
1914
                "schema": {
1915
                  "$ref": "#/components/schemas/ApiError"
1916
                }
1917
              }
1918
            },
1919
            "description": "Нарушение целостности данных"
1920
          }
1921
        },
1922
        "summary": "Добавление запроса от текущего пользователя на участие в событии",
1923
        "tags": [
1924
          "Private: Запросы на участие"
1925
        ]
1926
      }
1927
    },
1928
    "/users/{userId}/requests/{requestId}/cancel": {
1929
      "patch": {
1930
        "operationId": "cancelRequest",
1931
        "parameters": [
1932
          {
1933
            "description": "id текущего пользователя",
1934
            "in": "path",
1935
            "name": "userId",
1936
            "required": true,
1937
            "schema": {
1938
              "type": "integer",
1939
              "format": "int64"
1940
            }
1941
          },
1942
          {
1943
            "description": "id запроса на участие",
1944
            "in": "path",
1945
            "name": "requestId",
1946
            "required": true,
1947
            "schema": {
1948
              "type": "integer",
1949
              "format": "int64"
1950
            }
1951
          }
1952
        ],
1953
        "responses": {
1954
          "200": {
1955
            "content": {
1956
              "application/json": {
1957
                "schema": {
1958
                  "$ref": "#/components/schemas/ParticipationRequestDto"
1959
                }
1960
              }
1961
            },
1962
            "description": "Заявка отменена"
1963
          },
1964
          "404": {
1965
            "content": {
1966
              "application/json": {
1967
                "example": {
1968
                  "status": "NOT_FOUND",
1969
                  "reason": "The required object was not found.",
1970
                  "message": "Request with id=2727 was not found",
1971
                  "timestamp": "2022-09-07 09:10:50"
1972
                },
1973
                "schema": {
1974
                  "$ref": "#/components/schemas/ApiError"
1975
                }
1976
              }
1977
            },
1978
            "description": "Запрос не найден или недоступен"
1979
          }
1980
        },
1981
        "summary": "Отмена своего запроса на участие в событии",
1982
        "tags": [
1983
          "Private: Запросы на участие"
1984
        ]
1985
      }
1986
    }
1987
  },
1988
  "components": {
1989
    "schemas": {
1990
      "ApiError": {
1991
        "type": "object",
1992
        "properties": {
1993
          "errors": {
1994
            "type": "array",
1995
            "description": "Список стектрейсов или описания ошибок",
1996
            "example": [],
1997
            "items": {
1998
              "type": "string",
1999
              "description": "Список стектрейсов или описания ошибок",
2000
              "example": "[]"
2001
            }
2002
          },
2003
          "message": {
2004
            "type": "string",
2005
            "description": "Сообщение об ошибке",
2006
            "example": "Only pending or canceled events can be changed"
2007
          },
2008
          "reason": {
2009
            "type": "string",
2010
            "description": "Общее описание причины ошибки",
2011
            "example": "For the requested operation the conditions are not met."
2012
          },
2013
          "status": {
2014
            "type": "string",
2015
            "description": "Код статуса HTTP-ответа",
2016
            "example": "FORBIDDEN",
2017
            "enum": [
2018
              "100 CONTINUE",
2019
              "101 SWITCHING_PROTOCOLS",
2020
              "102 PROCESSING",
2021
              "103 CHECKPOINT",
2022
              "200 OK",
2023
              "201 CREATED",
2024
              "202 ACCEPTED",
2025
              "203 NON_AUTHORITATIVE_INFORMATION",
2026
              "204 NO_CONTENT",
2027
              "205 RESET_CONTENT",
2028
              "206 PARTIAL_CONTENT",
2029
              "207 MULTI_STATUS",
2030
              "208 ALREADY_REPORTED",
2031
              "226 IM_USED",
2032
              "300 MULTIPLE_CHOICES",
2033
              "301 MOVED_PERMANENTLY",
2034
              "302 FOUND",
2035
              "302 MOVED_TEMPORARILY",
2036
              "303 SEE_OTHER",
2037
              "304 NOT_MODIFIED",
2038
              "305 USE_PROXY",
2039
              "307 TEMPORARY_REDIRECT",
2040
              "308 PERMANENT_REDIRECT",
2041
              "400 BAD_REQUEST",
2042
              "401 UNAUTHORIZED",
2043
              "402 PAYMENT_REQUIRED",
2044
              "403 FORBIDDEN",
2045
              "404 NOT_FOUND",
2046
              "405 METHOD_NOT_ALLOWED",
2047
              "406 NOT_ACCEPTABLE",
2048
              "407 PROXY_AUTHENTICATION_REQUIRED",
2049
              "408 REQUEST_TIMEOUT",
2050
              "409 CONFLICT",
2051
              "410 GONE",
2052
              "411 LENGTH_REQUIRED",
2053
              "412 PRECONDITION_FAILED",
2054
              "413 PAYLOAD_TOO_LARGE",
2055
              "413 REQUEST_ENTITY_TOO_LARGE",
2056
              "414 URI_TOO_LONG",
2057
              "414 REQUEST_URI_TOO_LONG",
2058
              "415 UNSUPPORTED_MEDIA_TYPE",
2059
              "416 REQUESTED_RANGE_NOT_SATISFIABLE",
2060
              "417 EXPECTATION_FAILED",
2061
              "418 I_AM_A_TEAPOT",
2062
              "419 INSUFFICIENT_SPACE_ON_RESOURCE",
2063
              "420 METHOD_FAILURE",
2064
              "421 DESTINATION_LOCKED",
2065
              "422 UNPROCESSABLE_ENTITY",
2066
              "423 LOCKED",
2067
              "424 FAILED_DEPENDENCY",
2068
              "425 TOO_EARLY",
2069
              "426 UPGRADE_REQUIRED",
2070
              "428 PRECONDITION_REQUIRED",
2071
              "429 TOO_MANY_REQUESTS",
2072
              "431 REQUEST_HEADER_FIELDS_TOO_LARGE",
2073
              "451 UNAVAILABLE_FOR_LEGAL_REASONS",
2074
              "500 INTERNAL_SERVER_ERROR",
2075
              "501 NOT_IMPLEMENTED",
2076
              "502 BAD_GATEWAY",
2077
              "503 SERVICE_UNAVAILABLE",
2078
              "504 GATEWAY_TIMEOUT",
2079
              "505 HTTP_VERSION_NOT_SUPPORTED",
2080
              "506 VARIANT_ALSO_NEGOTIATES",
2081
              "507 INSUFFICIENT_STORAGE",
2082
              "508 LOOP_DETECTED",
2083
              "509 BANDWIDTH_LIMIT_EXCEEDED",
2084
              "510 NOT_EXTENDED",
2085
              "511 NETWORK_AUTHENTICATION_REQUIRED"
2086
            ]
2087
          },
2088
          "timestamp": {
2089
            "type": "string",
2090
            "description": "Дата и время когда произошла ошибка (в формате \"yyyy-MM-dd HH:mm:ss\")",
2091
            "example": "2022-06-09 06:27:23"
2092
          }
2093
        },
2094
        "description": "Сведения об ошибке"
2095
      },
2096
      "CategoryDto": {
2097
        "required": [
2098
          "name"
2099
        ],
2100
        "type": "object",
2101
        "properties": {
2102
          "id": {
2103
            "type": "integer",
2104
            "description": "Идентификатор категории",
2105
            "format": "int64",
2106
            "readOnly": true,
2107
            "example": 1
2108
          },
2109
          "name": {
2110
            "maxLength": 50,
2111
            "minLength": 1,
2112
            "type": "string",
2113
            "description": "Название категории",
2114
            "example": "Концерты"
2115
          }
2116
        },
2117
        "description": "Категория"
2118
      },
2119
      "CompilationDto": {
2120
        "required": [
2121
          "id",
2122
          "pinned",
2123
          "title"
2124
        ],
2125
        "type": "object",
2126
        "properties": {
2127
          "events": {
2128
            "uniqueItems": true,
2129
            "type": "array",
2130
            "description": "Список событий входящих в подборку",
2131
            "example": [
2132
              {
2133
                "annotation": "Эксклюзивность нашего шоу гарантирует привлечение максимальной зрительской аудитории",
2134
                "category": {
2135
                  "id": 1,
2136
                  "name": "Концерты"
2137
                },
2138
                "confirmedRequests": 5,
2139
                "eventDate": "2024-03-10 14:30:00",
2140
                "id": 1,
2141
                "initiator": {
2142
                  "id": 3,
2143
                  "name": "Фёдоров Матвей"
2144
                },
2145
                "paid": true,
2146
                "title": "Знаменитое шоу 'Летающая кукуруза'",
2147
                "views": 999
2148
              },
2149
              {
2150
                "annotation": "За почти три десятилетия группа 'Java Core' закрепились на сцене как группа, объединяющая поколения.",
2151
                "category": {
2152
                  "id": 1,
2153
                  "name": "Концерты"
2154
                },
2155
                "confirmedRequests": 555,
2156
                "eventDate": "2025-09-13 21:00:00",
2157
                "id": 1,
2158
                "initiator": {
2159
                  "id": 3,
2160
                  "name": "Паша Петров"
2161
                },
2162
                "paid": true,
2163
                "title": "Концерт рок-группы 'Java Core'",
2164
                "views": 991
2165
              }
2166
            ],
2167
            "items": {
2168
              "$ref": "#/components/schemas/EventShortDto"
2169
            }
2170
          },
2171
          "id": {
2172
            "type": "integer",
2173
            "description": "Идентификатор",
2174
            "format": "int64",
2175
            "example": 1
2176
          },
2177
          "pinned": {
2178
            "type": "boolean",
2179
            "description": "Закреплена ли подборка на главной странице сайта",
2180
            "example": true
2181
          },
2182
          "title": {
2183
            "type": "string",
2184
            "description": "Заголовок подборки",
2185
            "example": "Летние концерты"
2186
          }
2187
        },
2188
        "description": "Подборка событий"
2189
      },
2190
      "EventFullDto": {
2191
        "required": [
2192
          "annotation",
2193
          "category",
2194
          "eventDate",
2195
          "initiator",
2196
          "location",
2197
          "paid",
2198
          "title"
2199
        ],
2200
        "type": "object",
2201
        "properties": {
2202
          "annotation": {
2203
            "type": "string",
2204
            "description": "Краткое описание",
2205
            "example": "Эксклюзивность нашего шоу гарантирует привлечение максимальной зрительской аудитории"
2206
          },
2207
          "category": {
2208
            "$ref": "#/components/schemas/CategoryDto"
2209
          },
2210
          "confirmedRequests": {
2211
            "type": "integer",
2212
            "description": "Количество одобренных заявок на участие в данном событии",
2213
            "format": "int64",
2214
            "example": 5
2215
          },
2216
          "createdOn": {
2217
            "type": "string",
2218
            "description": "Дата и время создания события (в формате \"yyyy-MM-dd HH:mm:ss\")",
2219
            "example": "2022-09-06 11:00:23"
2220
          },
2221
          "description": {
2222
            "type": "string",
2223
            "description": "Полное описание события",
2224
            "example": "Что получится, если соединить кукурузу и полёт? Создатели \"Шоу летающей кукурузы\" испытали эту идею на практике и воплотили в жизнь инновационный проект, предлагающий свежий взгляд на развлечения..."
2225
          },
2226
          "eventDate": {
2227
            "type": "string",
2228
            "description": "Дата и время на которые намечено событие (в формате \"yyyy-MM-dd HH:mm:ss\")",
2229
            "example": "2024-12-31 15:10:05"
2230
          },
2231
          "id": {
2232
            "type": "integer",
2233
            "description": "Идентификатор",
2234
            "format": "int64",
2235
            "example": 1
2236
          },
2237
          "initiator": {
2238
            "$ref": "#/components/schemas/UserShortDto"
2239
          },
2240
          "location": {
2241
            "$ref": "#/components/schemas/Location"
2242
          },
2243
          "paid": {
2244
            "type": "boolean",
2245
            "description": "Нужно ли оплачивать участие",
2246
            "example": true
2247
          },
2248
          "participantLimit": {
2249
            "type": "integer",
2250
            "description": "Ограничение на количество участников. Значение 0 - означает отсутствие ограничения",
2251
            "format": "int32",
2252
            "example": 10,
2253
            "default": 0
2254
          },
2255
          "publishedOn": {
2256
            "type": "string",
2257
            "description": "Дата и время публикации события (в формате \"yyyy-MM-dd HH:mm:ss\")",
2258
            "example": "2022-09-06 15:10:05"
2259
          },
2260
          "requestModeration": {
2261
            "type": "boolean",
2262
            "description": "Нужна ли пре-модерация заявок на участие",
2263
            "example": true,
2264
            "default": true
2265
          },
2266
          "state": {
2267
            "type": "string",
2268
            "description": "Список состояний жизненного цикла события",
2269
            "example": "PUBLISHED",
2270
            "enum": [
2271
              "PENDING",
2272
              "PUBLISHED",
2273
              "CANCELED"
2274
            ]
2275
          },
2276
          "title": {
2277
            "type": "string",
2278
            "description": "Заголовок",
2279
            "example": "Знаменитое шоу 'Летающая кукуруза'"
2280
          },
2281
          "views": {
2282
            "type": "integer",
2283
            "description": "Количество просмотрев события",
2284
            "format": "int64",
2285
            "example": 999
2286
          }
2287
        }
2288
      },
2289
      "EventRequestStatusUpdateRequest": {
2290
        "type": "object",
2291
        "properties": {
2292
          "requestIds": {
2293
            "type": "array",
2294
            "description": "Идентификаторы запросов на участие в событии текущего пользователя",
2295
            "example": [
2296
              1,
2297
              2,
2298
              3
2299
            ],
2300
            "items": {
2301
              "type": "integer",
2302
              "description": "Идентификаторы запросов на участие в событии текущего пользователя",
2303
              "format": "int64"
2304
            }
2305
          },
2306
          "status": {
2307
            "type": "string",
2308
            "description": "Новый статус запроса на участие в событии текущего пользователя",
2309
            "example": "CONFIRMED",
2310
            "enum": [
2311
              "CONFIRMED",
2312
              "REJECTED"
2313
            ]
2314
          }
2315
        },
2316
        "description": "Изменение статуса запроса на участие в событии текущего пользователя"
2317
      },
2318
      "EventRequestStatusUpdateResult": {
2319
        "type": "object",
2320
        "properties": {
2321
          "confirmedRequests": {
2322
            "type": "array",
2323
            "items": {
2324
              "$ref": "#/components/schemas/ParticipationRequestDto"
2325
            }
2326
          },
2327
          "rejectedRequests": {
2328
            "type": "array",
2329
            "items": {
2330
              "$ref": "#/components/schemas/ParticipationRequestDto"
2331
            }
2332
          }
2333
        },
2334
        "description": "Результат подтверждения/отклонения заявок на участие в событии"
2335
      },
2336
      "EventShortDto": {
2337
        "required": [
2338
          "annotation",
2339
          "category",
2340
          "eventDate",
2341
          "initiator",
2342
          "paid",
2343
          "title"
2344
        ],
2345
        "type": "object",
2346
        "properties": {
2347
          "annotation": {
2348
            "type": "string",
2349
            "description": "Краткое описание",
2350
            "example": "Эксклюзивность нашего шоу гарантирует привлечение максимальной зрительской аудитории"
2351
          },
2352
          "category": {
2353
            "$ref": "#/components/schemas/CategoryDto"
2354
          },
2355
          "confirmedRequests": {
2356
            "type": "integer",
2357
            "description": "Количество одобренных заявок на участие в данном событии",
2358
            "format": "int64",
2359
            "example": 5
2360
          },
2361
          "eventDate": {
2362
            "type": "string",
2363
            "description": "Дата и время на которые намечено событие (в формате \"yyyy-MM-dd HH:mm:ss\")",
2364
            "example": "2024-12-31 15:10:05"
2365
          },
2366
          "id": {
2367
            "type": "integer",
2368
            "description": "Идентификатор",
2369
            "format": "int64",
2370
            "example": 1
2371
          },
2372
          "initiator": {
2373
            "$ref": "#/components/schemas/UserShortDto"
2374
          },
2375
          "paid": {
2376
            "type": "boolean",
2377
            "description": "Нужно ли оплачивать участие",
2378
            "example": true
2379
          },
2380
          "title": {
2381
            "type": "string",
2382
            "description": "Заголовок",
2383
            "example": "Знаменитое шоу 'Летающая кукуруза'"
2384
          },
2385
          "views": {
2386
            "type": "integer",
2387
            "description": "Количество просмотрев события",
2388
            "format": "int64",
2389
            "example": 999
2390
          }
2391
        },
2392
        "description": "Краткая информация о событии",
2393
        "example": [
2394
          {
2395
            "annotation": "Эксклюзивность нашего шоу гарантирует привлечение максимальной зрительской аудитории",
2396
            "category": {
2397
              "id": 1,
2398
              "name": "Концерты"
2399
            },
2400
            "confirmedRequests": 5,
2401
            "eventDate": "2024-03-10 14:30:00",
2402
            "id": 1,
2403
            "initiator": {
2404
              "id": 3,
2405
              "name": "Фёдоров Матвей"
2406
            },
2407
            "paid": true,
2408
            "title": "Знаменитое шоу 'Летающая кукуруза'",
2409
            "views": 999
2410
          },
2411
          {
2412
            "annotation": "За почти три десятилетия группа 'Java Core' закрепились на сцене как группа, объединяющая поколения.",
2413
            "category": {
2414
              "id": 1,
2415
              "name": "Концерты"
2416
            },
2417
            "confirmedRequests": 555,
2418
            "eventDate": "2025-09-13 21:00:00",
2419
            "id": 1,
2420
            "initiator": {
2421
              "id": 3,
2422
              "name": "Паша Петров"
2423
            },
2424
            "paid": true,
2425
            "title": "Концерт рок-группы 'Java Core'",
2426
            "views": 991
2427
          }
2428
        ]
2429
      },
2430
      "Location": {
2431
        "type": "object",
2432
        "properties": {
2433
          "lat": {
2434
            "type": "number",
2435
            "description": "Широта",
2436
            "format": "float",
2437
            "example": 55.754167
2438
          },
2439
          "lon": {
2440
            "type": "number",
2441
            "description": "Долгота",
2442
            "format": "float",
2443
            "example": 37.62
2444
          }
2445
        },
2446
        "description": "Широта и долгота места проведения события"
2447
      },
2448
      "NewCategoryDto": {
2449
        "required": [
2450
          "name"
2451
        ],
2452
        "type": "object",
2453
        "properties": {
2454
          "name": {
2455
            "maxLength": 50,
2456
            "minLength": 1,
2457
            "type": "string",
2458
            "description": "Название категории",
2459
            "example": "Концерты"
2460
          }
2461
        },
2462
        "description": "Данные для добавления новой категории"
2463
      },
2464
      "NewCompilationDto": {
2465
        "required": [
2466
          "title"
2467
        ],
2468
        "type": "object",
2469
        "properties": {
2470
          "events": {
2471
            "uniqueItems": true,
2472
            "type": "array",
2473
            "description": "Список идентификаторов событий входящих в подборку",
2474
            "example": [
2475
              1,
2476
              2,
2477
              3
2478
            ],
2479
            "items": {
2480
              "type": "integer",
2481
              "description": "Список идентификаторов событий входящих в подборку",
2482
              "format": "int64"
2483
            }
2484
          },
2485
          "pinned": {
2486
            "type": "boolean",
2487
            "description": "Закреплена ли подборка на главной странице сайта",
2488
            "example": false,
2489
            "default": false
2490
          },
2491
          "title": {
2492
            "maxLength": 50,
2493
            "minLength": 1,
2494
            "type": "string",
2495
            "description": "Заголовок подборки",
2496
            "example": "Летние концерты"
2497
          }
2498
        },
2499
        "description": "Подборка событий"
2500
      },
2501
      "NewEventDto": {
2502
        "required": [
2503
          "annotation",
2504
          "category",
2505
          "description",
2506
          "eventDate",
2507
          "location",
2508
          "title"
2509
        ],
2510
        "type": "object",
2511
        "properties": {
2512
          "annotation": {
2513
            "maxLength": 2000,
2514
            "minLength": 20,
2515
            "type": "string",
2516
            "description": "Краткое описание события",
2517
            "example": "Сплав на байдарках похож на полет."
2518
          },
2519
          "category": {
2520
            "type": "integer",
2521
            "description": "id категории к которой относится событие",
2522
            "format": "int64",
2523
            "example": 2
2524
          },
2525
          "description": {
2526
            "maxLength": 7000,
2527
            "minLength": 20,
2528
            "type": "string",
2529
            "description": "Полное описание события",
2530
            "example": "Сплав на байдарках похож на полет. На спокойной воде — это парение. На бурной, порожистой — выполнение фигур высшего пилотажа. И то, и другое дарят чувство обновления, феерические эмоции, яркие впечатления."
2531
          },
2532
          "eventDate": {
2533
            "type": "string",
2534
            "description": "Дата и время на которые намечено событие. Дата и время указываются в формате \"yyyy-MM-dd HH:mm:ss\"",
2535
            "example": "2024-12-31 15:10:05"
2536
          },
2537
          "location": {
2538
            "$ref": "#/components/schemas/Location"
2539
          },
2540
          "paid": {
2541
            "type": "boolean",
2542
            "description": "Нужно ли оплачивать участие в событии",
2543
            "example": true,
2544
            "default": false
2545
          },
2546
          "participantLimit": {
2547
            "type": "integer",
2548
            "description": "Ограничение на количество участников. Значение 0 - означает отсутствие ограничения",
2549
            "format": "int32",
2550
            "example": 10,
2551
            "default": 0
2552
          },
2553
          "requestModeration": {
2554
            "type": "boolean",
2555
            "description": "Нужна ли пре-модерация заявок на участие. Если true, то все заявки будут ожидать подтверждения инициатором события. Если false - то будут подтверждаться автоматически.",
2556
            "example": false,
2557
            "default": true
2558
          },
2559
          "title": {
2560
            "maxLength": 120,
2561
            "minLength": 3,
2562
            "type": "string",
2563
            "description": "Заголовок события",
2564
            "example": "Сплав на байдарках"
2565
          }
2566
        },
2567
        "description": "Новое событие"
2568
      },
2569
      "NewUserRequest": {
2570
        "required": [
2571
          "email",
2572
          "name"
2573
        ],
2574
        "type": "object",
2575
        "properties": {
2576
          "email": {
2577
            "maxLength": 254,
2578
            "minLength": 6,
2579
            "type": "string",
2580
            "description": "Почтовый адрес",
2581
            "example": "ivan.petrov@practicummail.ru"
2582
          },
2583
          "name": {
2584
            "maxLength": 250,
2585
            "minLength": 2,
2586
            "type": "string",
2587
            "description": "Имя",
2588
            "example": "Иван Петров"
2589
          }
2590
        },
2591
        "description": "Данные нового пользователя"
2592
      },
2593
      "ParticipationRequestDto": {
2594
        "type": "object",
2595
        "properties": {
2596
          "created": {
2597
            "type": "string",
2598
            "description": "Дата и время создания заявки",
2599
            "example": "2022-09-06T21:10:05.432"
2600
          },
2601
          "event": {
2602
            "type": "integer",
2603
            "description": "Идентификатор события",
2604
            "format": "int64",
2605
            "example": 1
2606
          },
2607
          "id": {
2608
            "type": "integer",
2609
            "description": "Идентификатор заявки",
2610
            "format": "int64",
2611
            "example": 3
2612
          },
2613
          "requester": {
2614
            "type": "integer",
2615
            "description": "Идентификатор пользователя, отправившего заявку",
2616
            "format": "int64",
2617
            "example": 2
2618
          },
2619
          "status": {
2620
            "type": "string",
2621
            "description": "Статус заявки",
2622
            "example": "PENDING"
2623
          }
2624
        },
2625
        "description": "Заявка на участие в событии"
2626
      },
2627
      "UpdateCompilationRequest": {
2628
        "type": "object",
2629
        "properties": {
2630
          "events": {
2631
            "uniqueItems": true,
2632
            "type": "array",
2633
            "description": "Список id событий подборки для полной замены текущего списка",
2634
            "items": {
2635
              "type": "integer",
2636
              "description": "Список id событий подборки для полной замены текущего списка",
2637
              "format": "int64"
2638
            }
2639
          },
2640
          "pinned": {
2641
            "type": "boolean",
2642
            "description": "Закреплена ли подборка на главной странице сайта",
2643
            "example": true
2644
          },
2645
          "title": {
2646
            "maxLength": 50,
2647
            "minLength": 1,
2648
            "type": "string",
2649
            "description": "Заголовок подборки",
2650
            "example": "Необычные фотозоны"
2651
          }
2652
        },
2653
        "description": "Изменение информации о подборке событий. Если поле в запросе не указано (равно null) - значит изменение этих данных не треубется."
2654
      },
2655
      "UpdateEventAdminRequest": {
2656
        "type": "object",
2657
        "properties": {
2658
          "annotation": {
2659
            "maxLength": 2000,
2660
            "minLength": 20,
2661
            "type": "string",
2662
            "description": "Новая аннотация",
2663
            "example": "Сап прогулки по рекам и каналам – это возможность увидеть Практикбург с другого ракурса"
2664
          },
2665
          "category": {
2666
            "type": "integer",
2667
            "description": "Новая категория",
2668
            "format": "int64",
2669
            "example": 3
2670
          },
2671
          "description": {
2672
            "maxLength": 7000,
2673
            "minLength": 20,
2674
            "type": "string",
2675
            "description": "Новое описание",
2676
            "example": "От английского SUP - Stand Up Paddle — \"стоя на доске с веслом\", гавайская разновидность сёрфинга, в котором серфер, стоя на доске, катается на волнах и при этом гребет веслом, а не руками, как в классическом серфинге."
2677
          },
2678
          "eventDate": {
2679
            "type": "string",
2680
            "description": "Новые дата и время на которые намечено событие. Дата и время указываются в формате \"yyyy-MM-dd HH:mm:ss\"",
2681
            "example": "2023-10-11 23:10:05"
2682
          },
2683
          "location": {
2684
            "$ref": "#/components/schemas/Location"
2685
          },
2686
          "paid": {
2687
            "type": "boolean",
2688
            "description": "Новое значение флага о платности мероприятия",
2689
            "example": true
2690
          },
2691
          "participantLimit": {
2692
            "type": "integer",
2693
            "description": "Новый лимит пользователей",
2694
            "format": "int32",
2695
            "example": 7
2696
          },
2697
          "requestModeration": {
2698
            "type": "boolean",
2699
            "description": "Нужна ли пре-модерация заявок на участие",
2700
            "example": false
2701
          },
2702
          "stateAction": {
2703
            "type": "string",
2704
            "description": "Новое состояние события",
2705
            "enum": [
2706
              "PUBLISH_EVENT",
2707
              "REJECT_EVENT"
2708
            ]
2709
          },
2710
          "title": {
2711
            "maxLength": 120,
2712
            "minLength": 3,
2713
            "type": "string",
2714
            "description": "Новый заголовок",
2715
            "example": "Сап прогулки по рекам и каналам"
2716
          }
2717
        },
2718
        "description": "Данные для изменения информации о событии. Если поле в запросе не указано (равно null) - значит изменение этих данных не треубется."
2719
      },
2720
      "UpdateEventUserRequest": {
2721
        "type": "object",
2722
        "properties": {
2723
          "annotation": {
2724
            "maxLength": 2000,
2725
            "minLength": 20,
2726
            "type": "string",
2727
            "description": "Новая аннотация",
2728
            "example": "Сап прогулки по рекам и каналам – это возможность увидеть Практикбург с другого ракурса"
2729
          },
2730
          "category": {
2731
            "type": "integer",
2732
            "description": "Новая категория",
2733
            "format": "int64",
2734
            "example": 3
2735
          },
2736
          "description": {
2737
            "maxLength": 7000,
2738
            "minLength": 20,
2739
            "type": "string",
2740
            "description": "Новое описание",
2741
            "example": "От английского SUP - Stand Up Paddle — \"стоя на доске с веслом\", гавайская разновидность сёрфинга, в котором серфер, стоя на доске, катается на волнах и при этом гребет веслом, а не руками, как в классическом серфинге."
2742
          },
2743
          "eventDate": {
2744
            "type": "string",
2745
            "description": "Новые дата и время на которые намечено событие. Дата и время указываются в формате \"yyyy-MM-dd HH:mm:ss\"",
2746
            "example": "2023-10-11 23:10:05"
2747
          },
2748
          "location": {
2749
            "$ref": "#/components/schemas/Location"
2750
          },
2751
          "paid": {
2752
            "type": "boolean",
2753
            "description": "Новое значение флага о платности мероприятия",
2754
            "example": true
2755
          },
2756
          "participantLimit": {
2757
            "type": "integer",
2758
            "description": "Новый лимит пользователей",
2759
            "format": "int32",
2760
            "example": 7
2761
          },
2762
          "requestModeration": {
2763
            "type": "boolean",
2764
            "description": "Нужна ли пре-модерация заявок на участие",
2765
            "example": false
2766
          },
2767
          "stateAction": {
2768
            "type": "string",
2769
            "description": "Изменение сотояния события",
2770
            "example": "CANCEL_REVIEW",
2771
            "enum": [
2772
              "SEND_TO_REVIEW",
2773
              "CANCEL_REVIEW"
2774
            ]
2775
          },
2776
          "title": {
2777
            "maxLength": 120,
2778
            "minLength": 3,
2779
            "type": "string",
2780
            "description": "Новый заголовок",
2781
            "example": "Сап прогулки по рекам и каналам"
2782
          }
2783
        },
2784
        "description": "Данные для изменения информации о событии. Если поле в запросе не указано (равно null) - значит изменение этих данных не треубется."
2785
      },
2786
      "UserDto": {
2787
        "required": [
2788
          "email",
2789
          "name"
2790
        ],
2791
        "type": "object",
2792
        "properties": {
2793
          "email": {
2794
            "type": "string",
2795
            "description": "Почтовый адрес",
2796
            "example": "petrov.i@practicummail.ru"
2797
          },
2798
          "id": {
2799
            "type": "integer",
2800
            "description": "Идентификатор",
2801
            "format": "int64",
2802
            "readOnly": true,
2803
            "example": 1
2804
          },
2805
          "name": {
2806
            "type": "string",
2807
            "description": "Имя",
2808
            "example": "Петров Иван"
2809
          }
2810
        },
2811
        "description": "Пользователь"
2812
      },
2813
      "UserShortDto": {
2814
        "required": [
2815
          "id",
2816
          "name"
2817
        ],
2818
        "type": "object",
2819
        "properties": {
2820
          "id": {
2821
            "type": "integer",
2822
            "description": "Идентификатор",
2823
            "format": "int64",
2824
            "example": 3
2825
          },
2826
          "name": {
2827
            "type": "string",
2828
            "description": "Имя",
2829
            "example": "Фёдоров Матвей"
2830
          }
2831
        },
2832
        "description": "Пользователь (краткая информация)"
2833
      }
2834
    }
2835
  }
2836
}
2837

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.