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.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 в виде работающего приложения.