/katerina

Приложение предоставляет возможность поближе познакомиться с достопримечательностями Беларуси

Primary LanguageJavaScriptMIT LicenseMIT

Katerina

CLI АПИ должно уметь восстанавливать json файл из достропримечательностей по заголовку их статьи на Википедии. В конечный файл для каждой достопримечательности должно войти:

  • координаты достопримечательности (Вики)
  • ключи для загрузки данных по достопримечательности из Вики
    • заголовок статьи (Ручное)
    • ИД страницы (Вики)
  • ссылка на официальный сайт достопримечательности если есть (Ручное)
  • теги для загрузки изображений из Инстаграмм (Ручное) Так же CLI должно уметь подгружать восстановленный файл в базу данных как тестовые данные. В самом АПИ такой возможности не будет.

Описание моделей БД Достопримечательноть SIGHT

  • id
  • keys Map of Object key1 [title] String required key2 [pageId] Number
  • names Map of String
  • coords Object required lat Number lon Number
  • tags Array of string
  • link String allow null regex URL
  • rate Number 1..10 default 0
  • rates Array of Number allow null
  • comments Array of
  • comfirmed Boolean default false
  • email String required regex EMAIL

Комментарий COMMENT

  • id
  • email String required regex EMAIL
  • publishAt Date required
  • name String allow null
  • flag String allow null
  • sight ID of
  • text String required max length 280

Пользователь USER

  • id
  • email String required regex EMAIL
  • name String required
  • password String required password
  • roles Array of
  • sinceAt Date required

Роль ROLE

  • id
  • name String required enum of Roles

Описание моделей приложения Достопримечательность SIGHT

  • id
  • key STRING | NUMBER
  • name STRING
  • text STRING
  • thumbnail STRING (LINK)
  • wikiLink STRING (LINK)
  • updatedAt DATE
  • coords OBJECT { lat, lon }
  • tags ARRAY
  • link STRING (LINK)
  • rate NUMBER
  • comments ARRAY

Комментарий COMMENT

  • id
  • email STRING (EMAIL)
  • publishAt DATE
  • name STRING
  • flag STRING (LINK)
  • text STRING

ФУНКЦИИ АПИ

  • АПИ связи с WikiMedia
  • getSight ВХОД ключи по языкам для разных достопримечательностей ВЫХОД для каждого языка должно вернуться * Название достопримечательности * ИД страницы достопримечательности для всей достопримечательности должны вернуться координаты
  • getSightDetail ВХОД ИД страницы (или заголовок, если по какой-то причине ИД страницы неизветен) и язык, для которого запрашивается достопримечательность ВЫХОД * Короткое описание достопримечательности * Изображение достопримечательности * Ссылка на страницу достопримечательности в Википедии * Дата последнего изменения статьи на Википедии
  • KATERINA АПИ для пользователя
  • GET /sights/?lang=en GET /en/sights 200 ARRAY 204 ARRAY EMPTY 400 Описание достопримечательностей из Базы данных. Ключевые данные - координаты и ключ запроса в Википедии. Остальные данные нужны для мгновенного отображения базовой информации пока идут запросы к сторонним АПИ.
  • GET /sight/{id}/?lang=en GET /en/sight/{id} 200 SIGHT 400 Описание достопримечательностей с данными из Википедии. Так же в модели будет присутствовать поле comments которое будет отображать количество присутствующий комментарией к достопримечательности. Если поле отсутствует, то комментариев нет.
  • GET /sight/{id}/comments 200 ARRAY 204 ARRAY EMPTY 400 Получить все комментарии к достопримечательности
  • POST /sight/{id}/rate [BODY] rate NUMBER 202 OBJECT { rate: new_rate } or BOOLEAN 400 Оценить достопримечательность {id} оценкой {rate}. При этом пересчитывается рейтинг по достопримечательности и новое число возвращается пользователю и сохраняется в базу данных. Для этих целей в БД хранится массив со всеми оценками пользователей. Новая оценка добавляется в этот массив и рассчет происходт по формуле new_rate = (Array[0] + ... + Array[n - 1] + rate ) / n + 1.
  • PUT /sight/{id}/comment [BODY] comment COMMENT 201 BOOLEAN 400 Добавить новый комментарий к достопримечательности
  • PUT /sight [BODY] sight SIGHT 201 BOOLEAN 400 Добавить новую достопримечательность. При этом достопримечательность не попадает сразу на карту. Она сохраняется в базе данных с признаком confirmed=false и становится доступной для одобрения или отклонения в административной части приложения
  • KATERINA АПИ для администратора
  • POST auth [BODY] email password 200 STRING 401 400 Принимает на вход email и пароль пользователя, авторизует его и возвращает JWT который будет использоваться во всех последующих запросах к административной части API
  • GET /sights auth 200 ARRAY 204 ARRAY EMPTY 403 400 Отображение таблицы с достопримечательностями, которые нуждаются в одобрении
  • POST /sights/{id} auth 202 BOOLEAN 403 400 Одобрить достопримечательность. При этом у нее станет признак confirmed=true. ??? Можно отправить письмо на адрес автора с одобрением предложенной им достопримечательности
  • DELETE /sights/{id} auth 202 BOOLEAN 403 400 Отклонить достопримечательность. При этом она удаляется из БД. ??? Можно отправить письмо автору с информацией о том, что его достопримечательность не прошла проверку.

При помощи тест-раннера JEST и библиотеки ассертов CHAI протестировать каждый метод клиентского и административного АПИ на стестовой базе данных. Так же протестировать часть АПИ отвечающего за связь с WikiMedia АПИ.

??? Надо найти апи для получения флага страны по ее кодовому обозначению. Желательно ссылкой в BASE64, но можно и просто ссылкой. 15.06.2018 Для этих целей, а так же для целей локализации использовано ipstack

I hope you will enjoy it. Max Eremin