Skip to content

Latest commit

 

History

History
110 lines (71 loc) · 5.13 KB

rest_api_for_blog.md

File metadata and controls

110 lines (71 loc) · 5.13 KB

RoR: REST API для блога

Часть 1. REST API для блога

1.1 Модели

Post — записи в блоге,

  • title — строковое, обязательное
  • body — строковое, обязательное
  • author — ссылка на автора
  • published_at — дата-время размещения записи

Comment — комментарии к записям

  • body — строковое, обязательное
  • author — ссылка на автора
  • published_at — дата-время размещения комментария

User — пользователи. Поскольку у нас есть авторы, нужна модель в которой мы будем их хранить.

  • nickname — строковое, обязательное
  • email — строковое, обязательное
  • password — строковое, обязательное

1.2 Эндпоинты

  • Реализовать эндпойнт для аутентификации. Как его сделать, up to you.

  • POST /api/v1/posts.json

    Отправляем:

    • title
    • body
    • published_at

    В ответ получаем json с полями:

    • id
    • title
    • body
    • published_at
    • author_nickname

    Если в запросе не передали published_at, то нужно подставлять текущий момент времени. Если передали не все поля, то ответ должен содержать одно поле errors — массив ошибок.

  • GET /api/v1/posts/:post_id.json

    Получить post по его id, поля в ответе как в эндпойнте POST /api/v1/posts.json

  • GET /api/v1/posts.json Отправляем:

    • page
    • per_page

    Получаем в ответ список записей отсортированных полю published_at по убыванию поля каждой записи как в эндпойнте POST /api/v1/posts.json. В заголовках ответа нужно передать общее количество страниц и записей.

  • Эндпойнты для комментариев можно не делать

1.3 Прочие требования

  • Rails 5.x
  • Postgres 9.x
  • Rspec 3.x
  • Json — ActiveModelSerializer или jsonapi-resources
  • В таблицах нужно указывать все необходимые индексы
  • Код моделей и контроллеров нужно покрыть тестами
  • Работающее приложение нужно разместить на heroku

Часть 2. Интерфейс, загрузка файлов и фоновые задачи

2.1 Загрузка аватара

На базе первой части сделать страницу, где пользователь может загрузить свой аватар. Интерфейс может быть простейшим, сделанным на дефолтном бутстрапе. Пользователю нужно выбирать файл jpg/png размером до 3мб, загружать его и видеть его превью после загрузки, урезанный до 300x300px. Файлы нужно загружать на S3

2.2 Аналитический отчет

На базе первой части , сделать аналитический отчёт.

Эндпоинт: POST /api/v1/reports/by_author.json

Параметры запроса:

  • start_date — начало интервала
  • end_date — конец интервала
  • email — куда отправить отчёт

Поля в ответе:

  • message: “Report generation started”

Эндпоинт добавляет задачу на генерацию отчёта в очередь, очередь обрабатывается отдельным процесом. Готовый отчёт отправляется на email указанный в задаче.

Отчёт должен представлять собой таблицу со столбцами:

  • nickname
  • email
  • количество записей за период
  • количество комментариев за период

Строки в отчёте должны быть отсортированы по значению вычисляемому как (количество постов + количество комментариев/10). Таблицу можно оформить как в виде html таблицы так и при помощи ASCII символов. Для этого задания нужно заполнить базу тестовыми данными, для чего удобно использовать gem faker.

2.3 Общие требования ко второй части

Результат выполнения второй части тестового задания так же нужно опубликовать на heroku в виде работающего приложения.