Skip to content

serikkazy-uly/academy-views

Repository files navigation

Сервис "просмотров" на PHP

Нужно реализовать методы сервиса которые будут:

  1. Сохранять количество просмотров страниц и телефонов
  2. Отдавать количество просмотров страниц и телефонов
  3. Отдавать статистику просмотров сущностей за разные периоды времени

Просмотры могут быть разных сущностей, например объявлений и статей. Поэтому, нужно предусмотреть возможность сохранять просмотры отдельно для объявлений и отдельно для статей.

Немного о реализации

Метод сохранения просмотров

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published