zelleratumm

wer

Jul 5th, 2020
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.58 KB | None | 0 0
  1. BSA Giphy
  2.  
  3. Нужно написать WebAPI приложение, который позволяет генерировать и сохранять персонализированные GIFs. Для получения GIF необходимо использовать API GIPHY.
  4.  
  5. Приложение состоит из 2 частей: файловое хранилище на диске, и персонализированный кэш в памяти (словарь):
  6.  
  7. {
  8. "john": [{
  9. "ball": [
  10. "/path/to/1.gif",
  11. "/path/to/2.gif",
  12. "/path/to/3.gif",
  13. ],
  14. "moon": [
  15. "/path/to/1.gif",
  16. "/path/to/2.gif",
  17. "/path/to/3.gif",
  18. ]
  19. }],
  20. "jack": [{
  21. "mad": [
  22. "/path/to/1.gif",
  23. "/path/to/2.gif",
  24. "/path/to/3.gif",
  25. ]
  26. }]
  27. }
  28.  
  29. В приложении должны быть реализованы две основные функции:
  30.  
  31. Генерация GIF
  32.  
  33. Пользователь отправляет запрос на генерацию GIF. Пользователь должен указать id - может быть любая строка, которую можно использовать в качестве пути в OS (необходимо добавить базовую валидацию по id), а так же ключевое слово, по которому можно найти GIF.
  34. Приложение пытается получить путь к GIF из кэша на диске (папка cache) (если есть несколько подходящих GIF, то выбрать случайную) и добавить его в в папку пользователя (по id). Затем обновить данные в кэше (в памяти) и вернуть пользователю путь к GIF.
  35. Если приложение не нашло GIF на диске (папка cache), то нужно сделать запрос на giphy.com, сохранить GIF (в качестве имени файла нужно использовать UUID) в кэш на диске (папка cache) и выполнить шаг 2.
  36. Добавить запись о генерации в файл истории пользователя history.csv
  37.  
  38. 10-10-2020,mad,/path/to/1.gif
  39. 10-12-2020,ball,/path/to/2.gif
  40.  
  41. Поиск GIF
  42.  
  43. Пользователь отправляет запрос на поиск GIF. Пользователь должен указать id - может быть любая строка, которую можно использовать в качестве пути в OS (необходимо добавить базовую валидацию по id), а так же ключевое слово, по которому можно найти GIF.
  44. Приложение пытается получить путь к GIF из кэша в памяти (если есть несколько, то выбрать случайную) и вернуть пользователю.
  45. Если в памяти нет подходящей GIF, то попробовать найти в папке пользователя и выполнить шаг 2.
  46. Если в папке пользователя нет подходящей GIF, вернуть 404.
  47.  
  48. Важно:
  49.  
  50. Добавить два типа конфигурации: dev и prod. В prod версии не хранить API Key для GIPHY.
  51. Использовать DI для всех элементов веб-приложения.
  52. Добавить в приложение валидацию на хедер X-BSA-GIPHY (значение может быть любым): если хедер отсутствует вернуть 403.
  53. Нужно подключить actuator и посмотреть информацию, которую он возвращает.
  54. Каждый запрос пользователя должен быть залоггирован.
  55.  
  56. FS structure
  57.  
  58. bsa_giphy
  59. cache
  60. ball
  61. 1.gif
  62. 2.gif
  63. 3.gif
  64. moon
  65. 1.gif
  66. 2.gif
  67. 3.gif
  68. users
  69. john
  70. history.csv
  71. ball
  72. 1.gif
  73. 2.gif
  74. 3.gif
  75. jack
  76. history.csv
  77. moon
  78. 1.gif
  79. 2.gif
  80. 3.gif
  81.  
  82. API
  83. Получить кэш с диска. Если указан query, то выбрать только соответствующие файлы.
  84.  
  85. GET /cache?query
  86.  
  87. Response
  88.  
  89. [
  90. {
  91. "query": "ball",
  92. "gifs": [
  93. "/path/to/1.gif",
  94. "/path/to/2.gif",
  95. "/path/to/3.gif",
  96. ]
  97. },
  98. {
  99. "query": "mad",
  100. "gifs": [
  101. "/path/to/1.gif,
  102. "/path/to/2.gif,
  103. "/path/to/3.gif,
  104. ]
  105. },
  106. {
  107. "query": "moon",
  108. "gifs": [
  109. "/path/to/1.gif",
  110. "/path/to/2.gif",
  111. "/path/to/3.gif",
  112. ]
  113. }
  114. ]
  115.  
  116. Скачать картинку из giphy.com и положить в соответствующую папку в кэше на диске. Вернуть объект со всеми картинками в кэше на диске.
  117.  
  118. POST /cache/generate
  119.  
  120. Body
  121.  
  122. {
  123. "query": "moon"
  124. }
  125.  
  126. Response
  127.  
  128. {
  129. "query": "moon",
  130. "gifs": [
  131. "/path/to/1.gif",
  132. "/path/to/2.gif",
  133. "/path/to/3.gif",
  134. ]
  135. }
  136.  
  137. Очистить кэш на диске
  138.  
  139. DELETE /cache
  140. Получить список всех файлов без привязки к ключевым словам
  141.  
  142. GET /gifs
  143.  
  144. Response
  145.  
  146. [
  147. "/path/to/1.gif",
  148. "/path/to/2.gif",
  149. "/path/to/3.gif",
  150. "/path/to/4.gif"
  151. ]
  152.  
  153. Получить список всех файлов с папки пользователя на диске
  154.  
  155. GET /user/:id/all
  156.  
  157. Response
  158.  
  159. [
  160. {
  161. "query": "ball",
  162. "gifs": [
  163. "/path/to/1.gif",
  164. "/path/to/2.gif",
  165. "/path/to/3.gif",
  166. ]
  167. },
  168. {
  169. "query": "moon",
  170. "gifs": [
  171. "/path/to/1.gif",
  172. "/path/to/2.gif",
  173. "/path/to/3.gif",
  174. ]
  175. }
  176. ]
  177.  
  178. Получить историю пользователя
  179.  
  180. GET /user/:id/history
  181.  
  182. Response
  183.  
  184. [
  185. {
  186. "date": "10-10-2020",
  187. "query": "mad",
  188. "gif": "/path/to/1.gif"
  189. },
  190. {
  191. "date": "10-11-2020",
  192. "query": "ball",
  193. "gif": "/path/to/2.gif"
  194. },
  195. {
  196. "date": "10-12-2020",
  197. "query": "moon",
  198. "gif": "/path/to/3.gif"
  199. },
  200. ]
  201.  
  202. Очистить историю пользователя
  203.  
  204. DELETE /user/:id/history/clean
  205. Выполнить поиск картинки. Если указан параметр force, то игнорировать кэш в памяти и сразу читать данные с диска. Добавить файл в кэш в памяти, если его еще там нет.
  206.  
  207. GET /user/:id/search?query&force
  208.  
  209. Response
  210.  
  211. "/path/to/1.gif"
  212.  
  213. Сгенерировать GIF. Если указан параметр force, то игнорировать кэш на диске (папка cache) и сразу искать файл в giphy.com. Добавить файл в кэш на диске (папка cache). (Доп. задание: избежать дублирования GIF файлов в кэше)
  214.  
  215. POST /user/:id/generate
  216.  
  217. BODY
  218.  
  219. {
  220. "query": "ball",
  221. "force": true
  222. }
  223.  
  224. RESPONSE
  225.  
  226. "/path/to/1.gif"
  227.  
  228. Очистить кэш пользователя в памяти по ключу query. Если ключ не указан, то очистить все данные по пользователю в кэше в памяти.
  229.  
  230. DELETE /user/:id/reset?query
  231. Удалить все данные по пользователю как на диске так и в кэше в памяти
  232.  
  233. DELETE /user/:id/clean
Advertisement
Add Comment
Please, Sign In to add comment