FoxMalder / adgo-test

adgo frontend test task

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Тестовое задание на должность Junior Frontend разработчика в AdGo

Описание задачи

Наша компания занимается рекламой. Мы собираем огромное множество статистических данных о показах, кликах и стоимости рекламных объявлений. Одним из основных инструментов нашей системы является статистика. Статистика это интерфейс для просмотра и анализа подобного рода данных. Мы предлагаем реализовать Вам упрощенную версию данного инструмента.

Статистика - набор событий о показах рекламы. Показ происходит в определенной среде: устройстве, операционной системе, браузере... Также пользователь, увидевший рекламу, может кликнуть по рекламному объявлению и посмотреть рекламу. За просмотр рекламодатель оплачивает определенную сумму денег.

Если посмотреть на показы в таблице, то это будет выглядить следующим образом:

ID Platform Operating system Browser Click Money Datetime
1 mobile android chrome true 0.004 2019-08-13 07:43:41
2 mobile ios safari false 0 2019-08-13 13:27:57
3 desktop windows chrome false 0 2019-08-14 03:51:13
4 mobile android opera false 0 2019-08-14 17:33:21
5 desktop macos firefox true 0.08 2019-08-15 09:00:05

В репозитории находится api-сервер, который умеет общаться по HTTP. Данное api предоставит вам данные которые необходимы для выполнения данного задания. Подробное описание api-сервера в конце readme.

Задание

Вам нужно реализовать интерфейс с выводом статистических данных в таблицу. Добавить возможность сгруппировать данные, применить фильтры, а также просмотр в режиме постраничной навигации.

scheme

Схематичное представление задания.

Что должно быть сделано:

  • Таблица с данными;
  • Постраничная навигация, например по 10 или 25 строк;
  • Фильтр периода за который происходит выбор статистики;
  • Фильтр по платформе, браузерам и операционным системам, о которых будет отображена информация;
  • Любые ваши дополнения привествуются.

FAQ

Куда и как отправить решение?

Сделайте fork данного репозитория. Реализуйте свое решение в директории app. Когда будете готовы, создайте pull request в master ветку нашего репозитория. Заодно мы оценим ваше умение работать с GIT.

Какие библиотеки и инструменты можно использовать?

Мы не хотим накладывать на вас много ограничений. Можете использовать любые библиотеки, но нам важно посмотреть ваш код и ваши решения.

Обязательное условие: выполнить проект на React.

Можно ли использовать бибилотеку компонентов?

Вы можете оформить проект как угодно, даже если это будет чистый html с минимальным количеством css, нам хватит. Если вы не можете не делать супер красивые и удобные интерфейсы, любите какой-то набор компонентов, можете воспользоваться им, например Bootstrap.

API

Для запуска веб сервера выполните команду npm start

Получить список платформ

GET /api/v1/platforms

Ответ

[  
    {  
        "label": "Desktop",
        "value": 1
    },
    {  
        "label": "Mobile",
        "value": 2
    }
]

Получить список браузеров

GET /api/v1/browsers

Пример ответа:

[  
    {  
        "label": "Chrome",
        "value": 1,
        "platform": 1
    },
    {  
        "label": "Firefox",
        "value": 2,
        "platform": 1
    },
    {
        "..."
    }
]

Получить список операционных систем

GET /api/v1/operating-systems

Пример ответа:

[  
     {  
        "label": "Windows",
        "value": 1,
        "platform": 1
    },
    {  
        "label": "Mac OS",
        "value": 2,
        "platform": 1
    },
    {
        "..."
    }
]

Получить список группировок

GET /api/v1/groups

Пример ответа:

[  
    {  
        "label": "Day",
        "value": "day"
    },
    {  
        "label": "Platform",
        "value": "platform"
    },
    {
        "..."
    }
]

Получить статистику

GET /api/v1/statistics?searchParams

Ответ

{
    "count": "количество всех записей на сервере по вашему запросу",
    "rows": "данные, с учетом пагинации",
    "total": "просуммированные показатели всех записей на сервере по вашему запросу"
}

Параметры searchParams

Поле Тип Обязательное Значение по умолчанию Описание
groupBy Строка Да - поле value из списка группировок
from Дата, в формате YYYY-MM-DD Да - дата с которой извлекаются события
to Дата, в формате YYYY-MM-DD Да - дата по которую, включительно, извлекаются события
limit Число Нет 25 количество записей
offset Число Нет 0 сдвигает выборку на offset * limit записей, offset=0&limit=25 возвращают первые 25 записей
platform Строка Нет - поле value из списка платформ
browsers[] Строка Нет - поле value из списка брузеров,,можно передать несколько
operatingSystems[] Строка Нет - поле value из списка операционных систем, можно передать несколько

Несколько примеров

Получаем статистику за первые 7 дней июля, сгруппированную по дням

GET /api/v1/statistics?groupBy=day&from=2019-07-01&to=2019-07-07

Ответ

{  
    "count": 7,
    "rows":[  
        {  
            "day": "2019-07-01",
            "impressions": 23,
            "clicks": 4,
            "money": 0.15445
        },
        {  
            "day": "2019-07-02",
            "impressions": 11,
            "clicks": 1,
            "money": 0.06262
        },
        {  
            "day": "2019-07-03",
            "impressions": 17,
            "clicks": 1,
            "money": 0.01448
        },
        {  
            "day": "2019-07-04",
            "impressions": 13,
            "clicks": 2,
            "money": 0.17215
        },
        {  
            "day": "2019-07-05",
            "impressions": 24,
            "clicks": 8,
            "money": 0.41402999999999995
        },
        {  
            "day": "2019-07-06",
            "impressions": 21,
            "clicks": 4,
            "money": 0.33422999999999997
        },
        {  
            "day": "2019-07-07",
            "impressions": 23,
            "clicks": 4,
            "money": 0.04693
        }
    ],
    "total":{  
        "impressions": 132,
        "clicks": 24,
        "money": 1.1988899999999998
    }
}

Вот так можем посмотреть что у нас происходило в июне и на разных платформах

GET /api/v1/statistics?groupBy=platform&from=2019-06-01&to=2019-06-30

Ответ

{  
    "count": 2,
    "rows":[  
        {  
            "platform": "Mobile",
            "impressions": 473,
            "clicks": 97,
            "money": 4.42389
        },
        {  
            "platform": "Desktop",
            "impressions": 133,
            "clicks": 17,
            "money": 0.97717
        }
    ],
    "total":{  
        "impressions": 606,
        "clicks": 114,
        "money": 5.40106
    }
}

Получаем статистику за первые 7 дней июля, сгруппированную по дням, только по браузерам: Chrome (value=1), Firefox (value=2) и Chrome Mobile (value=5)

GET /api/v1/statistics?groupBy=day&from=2019-07-01&to=2019-07-07&browsers[]=1&browsers[]=2&browsers[]=5

Ответ

{
    "count": 7,
    "rows": [
        {
            "day": "2019-07-01",
            "impressions": 2,
            "clicks": 0,
            "money": 0
        },
        {
            "day": "2019-07-02",
            "impressions": 4,
            "clicks": 2,
            "money": 0.10963
        },
        {
            "day": "2019-07-03",
            "impressions": 4,
            "clicks": 0,
            "money": 0
        },
        {
            "day": "2019-07-04",
            "impressions": 4,
            "clicks": 1,
            "money": 0.04082
        },
        {
            "day": "2019-07-05",
            "impressions": 6,
            "clicks": 1,
            "money": 0.01814
        },
        {
            "day": "2019-07-06",
            "impressions": 4,
            "clicks": 2,
            "money": 0.10832
        },
        {
            "day": "2019-07-07",
            "impressions": 9,
            "clicks": 1,
            "money": 0.01843
        }
    ],
    "total": {
        "impressions": 33,
        "clicks": 7,
        "money": 0.29534
    }
}

The end

Баг фиксы и правки приветствуются. Все вопросы можно задать в телеграмм.

Пожалуйста, приложите инструкцию как нам запустить ваше решение.

Удачи!

About

adgo frontend test task

License:MIT License


Languages

Language:JavaScript 100.0%