Skip to content

The project was made for Ozon Tech as a part of test task.

Notifications You must be signed in to change notification settings

W1ngshot/TestTask

Repository files navigation

ReportApp - сервис для уменьшения трат на составление отчётов.

Принцип работы:

  • Запрос отчёта поступает в очередь.
  • Приложение читает очередь с буфером определенного размера и записывает запросы в БД.
  • Раз в час запускается задача, которая читает первый {smallBatchSize} сообщений из БД, отсортированных по времени запроса.
    Она проверяет, нет ли запросов, которые скоро истекают. Если есть, то обрабатывает до тех пор, пока срочные запросы не кончатся.
  • Раз в день в 23 по МСК запускается задача, которая обрабатывает все накопившиеся запросы по {largeBatchSize} за раз.
  • Все сформированные отчеты попадают в БД.
  • Пользователь может запросить отчёт по item_id и registration_id, дополнительно указав номер страницы и количество элементов на странице.
  • Все ответы кэшируются на одну минуту, чтобы пользователю было сложнее положить БД.
  • Также добавлен rate limiter, который по умолчанию разрешает 5 запросов от пользователя раз в 30 секунд.

Примеры запросов:

Grpc:

localhost:5282  ReportsApi/GetReports
{
    "item_id": "4",
    "registration_id": "212",
    "page": {
        "elements_per_page": 10,
        "page_number": 1
    }
}

HTTP:

http://localhost:5281/reports?itemId=4&registrationId=212&page.pageNumber=2&page.elementsPerPage=2

About

The project was made for Ozon Tech as a part of test task.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published