Skip to content

Latest commit

 

History

History
169 lines (123 loc) · 7.36 KB

task_description_ru.md

File metadata and controls

169 lines (123 loc) · 7.36 KB

Тестовое задание

Описание

Требуется сделать сервис, который следит за изменением курсов BTC-USDT и фиатных валют к рублю, сохраняет изменения в БД и отдает клиентам по REST API.

Источник для пары BTC-USDT: https://api.kucoin.com/api/v1/market/stats?symbol=BTC-USDT

Источник для курсов фиатных валют: http://www.cbr.ru/scripts/XML_daily.asp

При изменении курса BTC-USDT проиходит следующее:

  1. Курс сохраняется в БД с текущим временем (данные об изменении должны накапливаться для последующего отображения в истории)
  2. Вычисляется значение по отношении к рублю через USD
  3. Вычисляется курс BTC/фиатные валюты (включая рубль)
  4. Курсы сохраняются в БД

Сервер должен запускаться в docker-контейнере через docker-compose

Стэк

Язык программирования Go
СУБД Postgres
Контейнеризация Docker, docker-compose

Требования

  • Проект должен быть загружен в git-репозиторий
  • Дедлайн - 2 дня
  • Проект должен запускаться из репозитория без дополнительной настройки
  • Сервер должен поддерживать "мягкое выключение" и при экстренной остановке не терять данные
  • Код должен быть покрыт тестами (юнит-тесты, опционально интеграционные тесты)

Получение курсов фиатных валют

Получение курсов происходит:

  1. При запуске сервера
  2. Раз в сутки по таймеру

После получения курсов их требуется сохранить в БД с датой обновления и возможностью получения истории изменений. Данные за одни сутки не должны дублироваться.

Получение курса BTC-USDT

Получение курса происходит:

  1. При запуске сервера
  2. Раз в 10 секунд

В том случае, если курс изменился, происходит сохрание курса в БД с датой изменения и возможностью получения истории, после чего происходит пересчет курса BTC к фиатным валютам и их сохранение в БД

БД

После остановки сервера данные не должны теряться

Docker

Итоговый образ не должен содержать никакого исходного кода, только исполняемый файл

docker-compose

При запуске должен сначала запускать СУБД, и только затем сам сервер. Развертывание должно происходить таким образом, чтобы данные БД не терялись после остановки контейнеров и очистки хранилища. Доступ к БД снаружи должен быть ограничен

REST API

REST API должен содержать два endpoint'а:

GET/POST /api/btcusdt

Получить историю изменения курса BTC-USDT

GET-запрос должен выводить последнее (текущее) значение

POST-запрос - историю с фильтрами по дате и времени и пагинацией

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

{
    "total": 1232, // общее кол-во записей
    "history": [
        {
            // допускается unix timestamp, либо дата в формате YYYY-MM-DD HH:mm:ss
            "timestamp":12321434,
            // курс
            "value": 123.45
            // допускается отображение доп. полей
        },
        {
            // допускается unix timestamp, либо дата в формате YYYY-MM-DD HH:mm:ss
            "timestamp":12321437,
            // курс
            "value": 123.42
            // допускается отображение доп. полей
        }
    ]
}

GET/POST /api/currencies

Получить историю изменения курса фиатных валют

GET-запрос отображает последние (текущие) курсы фиатных валют по отношению к рублю

POST-запрос возвращает историю изменения с фильтрами по дате и валюте и пагинацией

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

{
    "total": 12324, // общее кол-во записей
    "history": [
        {
            // Используется только дата в формате YYYY-MM-DD
            "date": "2020-05-27",
            "HUF": 16.28,
            "BRL": 12.5
            // ...
        },
        {
            "date": "2020-05-28",
            "HUF": 16.28,
            "BRL": 12.5
            // ...
        }
    ]
}

GET /api/latest

Выводит кусрс BTC к фиатным валютам

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

{
    "HUF": 12344.23465,
    "HKD": 23456.213
    // ...
}

Опционально

  • Получаемые клиентом данные при выводе в консоль должны не выводится по новой, а обновлять данные на экране консоли
  • Желательно сделать кофигурацию для Drone CI или Gitlab CI
  • Сделать систему снятия бэкапов БД по таймеру
  • Сделать endpoint для вывода истории курса BTC к фиатным валютам, аналогичный POST /api/currencies (POST /api/latest)
  • Сделать endpoint для отображения по одной валюте /api/latest/{CHAR_CODE}
  • Сделать документацию к модулям