cinema.yml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. openapi: 3.0.0
  2. info:
  3. title: АПИ для демо-экзамена по компетенции Разработка мобильных приложений
  4. version: 0.0.1
  5. description: |
  6. API для мобильного приложения "WS-Cinema".
  7. Перечень ошибок неполный, возможно получение от сервера незадокументированных ошибок.
  8. Для передачи токена необходимо использовать Header: **Authorization: Bearer {token}**
  9. Требования к email: email должен соответствовать паттерну **name@domenname.ru**, где имя и домен второго уровня могут состоять только из маленьких букв и цифр, домен верхнего уровня - только из маленьких букв. Длина домена верхнего уровня - не более 3х символов.
  10. **BASE URL**: https://cinema.kolei.ru
  11. **BASE URL** Для видео: https://cinema.kolei.ru/up/video/
  12. **BASE URL** Для изображений и аватаров: https://cinema.kolei.ru/up/images/
  13. servers:
  14. - url: https://cinema.kolei.ru
  15. tags:
  16. - name: auth
  17. description: Регистрация и авторизация (получение токена)
  18. - name: movie
  19. description: Информация о киноновинках
  20. - name: up
  21. description: Ресурсы
  22. - name: user
  23. description: Информация о пользователе
  24. paths:
  25. /auth/register:
  26. post:
  27. tags:
  28. - auth
  29. summary: Регистрация
  30. requestBody:
  31. required: true
  32. content:
  33. application/json:
  34. schema:
  35. type: object
  36. properties:
  37. email:
  38. type: string
  39. description: Email пользователя. Email должен соответствовать паттерну "name@domenname.ru", где имя и домен второго уровня могут состоять только из маленьких букв и цифр, домен верхнего уровня - только из маленьких букв. Длина домена верхнего уровня - не более 3х символов.
  40. example: kolei@yandex.ru
  41. password:
  42. type: string
  43. description: Пароль
  44. example: qwerty
  45. firstName:
  46. type: string
  47. description: Имя пользователя
  48. example: Евгений
  49. lastName:
  50. type: string
  51. description: Фамилия пользователя
  52. example: Колесников
  53. required:
  54. - email
  55. - password
  56. - firstName
  57. - lastName
  58. responses:
  59. '200':
  60. description: Успешная регистрация
  61. '400':
  62. description: Проблемы при регистрации
  63. /auth/login:
  64. post:
  65. tags:
  66. - auth
  67. summary: Аутентификация в системе
  68. requestBody:
  69. required: true
  70. content:
  71. application/json:
  72. schema:
  73. type: object
  74. properties:
  75. email:
  76. type: string
  77. description: Email пользователя. Email должен соответствовать паттерну "name@domenname.ru", где имя и домен второго уровня могут состоять только из маленьких букв и цифр, домен верхнего уровня - только из маленьких букв. Длина домена верхнего уровня - не более 3х символов.
  78. example: kolei@yandex.ru
  79. password:
  80. type: string
  81. description: Пароль
  82. example: qwerty
  83. required:
  84. - email
  85. - password
  86. responses:
  87. '200':
  88. description: Успешная аутентификация
  89. content:
  90. application/json:
  91. schema:
  92. type: object
  93. properties:
  94. token:
  95. type: integer
  96. description: Токен доступа к серверу
  97. example: 123456
  98. # links:
  99. # GetAuthToken:
  100. # parameters:
  101. # token: '$response.body#/token'
  102. '400':
  103. description: Проблема аутентификации
  104. /movies:
  105. get:
  106. tags:
  107. - movie
  108. summary: Получить список фильмов
  109. description: Список фильмов для отображения на главном экране
  110. parameters:
  111. - name: filter
  112. in: query
  113. description: Фильтр для запроса
  114. required: true
  115. schema:
  116. type: string
  117. default: new
  118. enum: [new, inTrend, forMe]
  119. responses:
  120. '200':
  121. description: Массив фильмов
  122. content:
  123. application/json:
  124. schema:
  125. $ref: '#/components/schemas/Movie'
  126. '400':
  127. description: Проблемы при запросе
  128. /user:
  129. get:
  130. tags:
  131. - user
  132. summary: Получить информацию о пользователе
  133. description: Необходимо передать header параметр авторизации типа Bearer
  134. security:
  135. - BearerAuth: []
  136. responses:
  137. '200':
  138. description: Данные пользователя
  139. content:
  140. application/json:
  141. schema:
  142. $ref: '#/components/schemas/User'
  143. '401':
  144. description: Неавторизированный доступ
  145. /user/avatar:
  146. post:
  147. tags:
  148. - user
  149. security:
  150. - BearerAuth: []
  151. summary: Загрузка фотографии
  152. description: Данный запрос принимает только изображения формата .jpg/.jpeg. Пустые изображения и невалидные изображения не разрешены
  153. requestBody:
  154. required: true
  155. content:
  156. multipart/form-data:
  157. schema:
  158. type: object
  159. properties:
  160. token:
  161. type: string
  162. format: string
  163. file:
  164. type: string
  165. format: binary
  166. encoding:
  167. file:
  168. contentType: image/jpg, image/jpeg
  169. responses:
  170. '200':
  171. description: Данные пользователя
  172. content:
  173. application/json:
  174. schema:
  175. $ref: '#/components/schemas/User'
  176. '401':
  177. description: Неавторизированный доступ
  178. /user/chats:
  179. get:
  180. tags:
  181. - user
  182. security:
  183. - BearerAuth: []
  184. summary: Список чатов
  185. description: Необходимо передать header параметр авторизации типа Bearer
  186. responses:
  187. '200':
  188. description: Массив информации о чатах пользователя
  189. content:
  190. application/json:
  191. schema:
  192. type: array
  193. items:
  194. $ref: '#/components/schemas/Chat'
  195. '401':
  196. description: Неавторизованный доступ
  197. /chats/{chatId}/messages:
  198. get:
  199. tags:
  200. - user
  201. security:
  202. - BearerAuth: []
  203. summary: Список сообщений чата
  204. description: Необходимо передать header параметр авторизации типа Bearer
  205. parameters:
  206. - in: path
  207. name: chatId
  208. schema:
  209. type: integer
  210. required: true
  211. description: Id чата
  212. responses:
  213. '200':
  214. description: Массив сообщений чата
  215. content:
  216. application/json:
  217. schema:
  218. type: array
  219. items:
  220. $ref: '#/components/schemas/Message'
  221. '401':
  222. description: Неавторизированный доступ
  223. post:
  224. tags:
  225. - user
  226. security:
  227. - BearerAuth: []
  228. summary: Отправить сообщение в чат
  229. description: Необходимо передать header параметр авторизации типа Bearer
  230. parameters:
  231. - in: path
  232. name: chatId
  233. schema:
  234. type: integer
  235. required: true
  236. description: Id чата
  237. requestBody:
  238. required: true
  239. content:
  240. application/json:
  241. schema:
  242. type: object
  243. properties:
  244. text:
  245. type: string
  246. example: Текст сообщения
  247. responses:
  248. '200':
  249. description: Сообщение чата
  250. content:
  251. application/json:
  252. schema:
  253. $ref: '#/components/schemas/Message'
  254. '400':
  255. description: Проблемы при сохранении
  256. '401':
  257. description: Неавторизированный доступ
  258. /chats/{movieId}:
  259. get:
  260. tags:
  261. - user
  262. summary: Список чатов фильма
  263. description: Необходимо передать header параметр авторизации типа Bearer
  264. parameters:
  265. - in: path
  266. name: movieId
  267. schema:
  268. type: integer
  269. required: true
  270. description: Id фильма
  271. responses:
  272. '200':
  273. description: Массив чатов
  274. content:
  275. application/json:
  276. schema:
  277. type: array
  278. items:
  279. $ref: '#/components/schemas/Chat'
  280. '400':
  281. description: Фильм не найден
  282. post:
  283. tags:
  284. - user
  285. security:
  286. - BearerAuth: []
  287. summary: Создать чат (для фильма)
  288. description: Необходимо передать header параметр авторизации типа Bearer
  289. parameters:
  290. - in: path
  291. name: movieId
  292. schema:
  293. type: integer
  294. required: true
  295. description: Id фильма
  296. requestBody:
  297. required: true
  298. content:
  299. application/json:
  300. schema:
  301. type: object
  302. properties:
  303. name:
  304. type: string
  305. example: Название чата
  306. responses:
  307. '200':
  308. description: Информация о созданном чате
  309. content:
  310. application/json:
  311. schema:
  312. $ref: '#/components/schemas/Chat'
  313. '401':
  314. description: Неавторизованный доступ
  315. /up/images/{imageName}:
  316. get:
  317. tags:
  318. - up
  319. summary: Получение картинки
  320. parameters:
  321. - in: path
  322. name: imageName
  323. schema:
  324. type: string
  325. required: true
  326. description: Название картинки (с расширением), полученное при запросе списка фильмов
  327. responses:
  328. '200':
  329. description: Файл картинки в формате .jpg
  330. content:
  331. image/jpg:
  332. schema:
  333. type: string
  334. format: binary
  335. '404':
  336. description: Картинка не найдена на сервере
  337. security:
  338. - BearerAuth: []
  339. components:
  340. securitySchemes:
  341. BearerAuth:
  342. type: http
  343. scheme: bearer
  344. schemas:
  345. Movie:
  346. type: array
  347. items:
  348. type: object
  349. properties:
  350. movieId:
  351. type: string
  352. example: 1
  353. name:
  354. type: string
  355. example: Название фильма
  356. description:
  357. type: string
  358. example: Описание фильма
  359. age:
  360. type: string
  361. enum: ['0','6','12','16','18']
  362. description: Возрастные ограничения
  363. images:
  364. type: array
  365. items:
  366. type: string
  367. poster:
  368. type: string
  369. example: poster.png
  370. description: Название картинки постера
  371. tags:
  372. $ref: '#/components/schemas/Tag'
  373. category:
  374. type: string
  375. description: Жанр фильма
  376. required:
  377. - movieId
  378. - category
  379. Tag:
  380. type: array
  381. items:
  382. type: object
  383. properties:
  384. idTags:
  385. type: string
  386. example: 13
  387. tagName:
  388. type: string
  389. example: Комедия
  390. User:
  391. type: array
  392. items:
  393. type: object
  394. properties:
  395. userId:
  396. type: string
  397. example: 27
  398. firstName:
  399. type: string
  400. example: Евгений
  401. lastName:
  402. type: string
  403. example: Колесников
  404. email:
  405. type: string
  406. example: kolei@yandex.ru
  407. avatar:
  408. type: string
  409. example: ekolesnikov.jpg
  410. description: Название файла
  411. Chat:
  412. type: object
  413. properties:
  414. name:
  415. type: string
  416. description: Название чата
  417. example: Дюна
  418. chatId:
  419. type: string
  420. example: 1
  421. movieId:
  422. type: string
  423. example: 1
  424. description: Id фильма
  425. Message:
  426. type: object
  427. properties:
  428. chatId:
  429. type: string
  430. example: 1
  431. messageId:
  432. type: string
  433. example: 1
  434. creationDateTime:
  435. type: string
  436. format: date
  437. example: 2022-11-07 10:30
  438. description: Дата и время добавления сообщения в формате YYYY-MM-DD hh:mm
  439. firstName:
  440. type: string
  441. example: Евгений
  442. lastName:
  443. type: string
  444. example: Колесников
  445. avatar:
  446. type: string
  447. example: somename.jpg
  448. text:
  449. type: string
  450. example: А мне не понравился последний сезон. Позор создателям.