Требуется сделать сервис, который следит за изменением курсов 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 проиходит следующее:
- Курс сохраняется в БД с текущим временем (данные об изменении должны накапливаться для последующего отображения в истории)
- Вычисляется значение по отношении к рублю через USD
- Вычисляется курс BTC/фиатные валюты (включая рубль)
- Курсы сохраняются в БД
Сервер должен запускаться в docker-контейнере через docker-compose
Язык программирования | Go |
СУБД | Postgres |
Контейнеризация | Docker, docker-compose |
- Проект должен быть загружен в git-репозиторий
- Дедлайн - 2 дня
- Проект должен запускаться из репозитория без дополнительной настройки
- Сервер должен поддерживать "мягкое выключение" и при экстренной остановке не терять данные
- Код должен быть покрыт тестами (юнит-тесты, опционально интеграционные тесты)
Получение курсов происходит:
- При запуске сервера
- Раз в сутки по таймеру
После получения курсов их требуется сохранить в БД с датой обновления и возможностью получения истории изменений. Данные за одни сутки не должны дублироваться.
Получение курса происходит:
- При запуске сервера
- Раз в 10 секунд
В том случае, если курс изменился, происходит сохрание курса в БД с датой изменения и возможностью получения истории, после чего происходит пересчет курса BTC к фиатным валютам и их сохранение в БД
После остановки сервера данные не должны теряться
Итоговый образ не должен содержать никакого исходного кода, только исполняемый файл
При запуске должен сначала запускать СУБД, и только затем сам сервер. Развертывание должно происходить таким образом, чтобы данные БД не терялись после остановки контейнеров и очистки хранилища. Доступ к БД снаружи должен быть ограничен
REST API должен содержать два endpoint'а:
Получить историю изменения курса 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-запрос возвращает историю изменения с фильтрами по дате и валюте и пагинацией
Пример ответа:
{
"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
// ...
}
]
}
Выводит кусрс BTC к фиатным валютам
Пример ответа:
{
"HUF": 12344.23465,
"HKD": 23456.213
// ...
}
- Получаемые клиентом данные при выводе в консоль должны не выводится по новой, а обновлять данные на экране консоли
- Желательно сделать кофигурацию для Drone CI или Gitlab CI
- Сделать систему снятия бэкапов БД по таймеру
- Сделать endpoint для вывода истории курса BTC к фиатным валютам, аналогичный POST
/api/currencies
(POST/api/latest
) - Сделать endpoint для отображения по одной валюте
/api/latest/{CHAR_CODE}
- Сделать документацию к модулям