Нужно реализовать методы сервиса которые будут:
- Сохранять количество просмотров страниц и телефонов
- Отдавать количество просмотров страниц и телефонов
- Отдавать статистику просмотров сущностей за разные периоды времени
Просмотры могут быть разных сущностей, например объявлений и статей. Поэтому, нужно предусмотреть возможность сохранять просмотры отдельно для объявлений и отдельно для статей.
POST /project/entity/id/
Информация о просмотрах передается в теле POST запроса:
page_views - на сколько нужно увеличить просмотры страницы
phone_views - на сколько нужно увеличить просмотры телефонов
Ответом на данный запрос должно быть
{
"data": {
"page_views": 27,
"phone_views": 6
}
}
где в page_views и nb_phone_views вернутся обновленные значения просмотров.
GET /project/entity/id/
Ответом на данный запрос должно быть
{
"data": {
"[id]": {
"page_views": 27,
"phone_views": 6
}
}
}
где в page_views и nb_phone_views вернутся значения просмотров.
GET /project/entity/id/periods/?period[last-year][from]=2019-01-01&period[last-year][to]=2020-01-01
Ответом на данный запрос должно быть
{
"data": {
"last-year": {
"[id]": {
"page_views": 10000,
"phone_views": 300
}
}
}
}
где в page_views и nb_phone_views вернутся значения просмотров за запрашиваемый период от from до to
Можно взяться за доработку сервиса и сделать сохранение и отдачу просмотров пачкой.
POST /project/entity/bulk/
Информация о просмотрах передается в теле POST запроса в формате с параметрами:
page_views[ID] - на сколько нужно увеличить просмотры страницы объявления
phone_views[ID] - на сколько нужно увеличить просмотры телефонов объявления
{
"data": {
"123": {
"page_views": 129,
"phone_views": 0
},
"345": {
"page_views": 312,
"phone_views": 2
}
}
}
По аналогии нужно сделать метод отдачи просмотров.
Метод отдачи статистики тоже можно улучшить, чтобы он возвращал несколько периодов за один запрос.
Как видно из тз, необходимо, чтобы была возможность получать просмотры за определенный период времени. Для этого нужно, чтобы эти просмотры хранились с меткой времени в базе данных.
Чтобы каждый просмотр не сохранять отдельно, можно сделать группировку по дате по дням.
Для базы данных можно использовать MySQL или Mongodb, но в принципе можно использовать любую бд.
Задание достаточно объемное, поэтому постарайтесь сделать сначала MVP версию сервиса, а уже затем ее дорабатывать. Дорабатывать можно много в этом сервисе, сервис такого рода подвержен сильным нагрузкам, после создания MVP версии можно приступить к увеличению производительности сервиса.
Для запуска тестов нужно выполнить команду из корня проекта:
docker-compose up tests
Сейчас в файле codeception.yml в ключе suites.api.modules.enabled[0].REST.url указан адрес настоящего сервиса просмотров на тесте.
Вместо него вы должны указать адрес своего сервиса, запустить тесты и они должны успешно пройти.
Тесты покрывают только базуовую функционлатсность(пункты 1,2 и 3)
- Валидация
- Кэширование
- Middleware
- Коды ошибок
- Автотесты основного функционала
- Docker
- Nginx
- MySQL
- Redis
- Symfony
- Laravel
- Lumen
- Slim