## Общие сведения - **Название проекта:** Сервис сбора статистики - **Описание проекта:** Микросервис на *golang* для сбора статистики - **Цель проекта:** Создать сервис с возможностью хранения статистики в базе данных ## Требования к функциональности Должно быть **4 api ручки**: ```GetOrderBook(exchange_name, pair string) ([]*DepthOrder, error)``` ```SaveOrderBook(exchange_name, pair string, orderBook []*DepthOrder) error``` ```GetOrderHistory(client *Client) ([]*HistoryOrder, error)``` ```SaveOrder(client *Client, order *HistoryOrder) error``` ## Технические требования - **Язык программирования:** *Go 1.22* - **Библиотеки и фреймворки:** Любые на ваш выбор - **Архитектура:** REST API - **База данных:** Лучше реализовать *ClickHouse*, но можно и *Postgres* ## Нефункциональные требования - **Производительность:** Время отклика сервера не более 200 мс - **Rps:** до 200 на запись, до 100 на чтение ## Тестирование **Тестирование:** Unit-тесты для всех основных функций ## Требования к документации - **Документация кода:** Комментарии к основным модулям и функциям - **Пользовательская документация:** Руководство пользователя ## Детали реализации: - Таблица **order_book** | Столбец | Тип данных | |----------|--------------| | id | int64 | | exchange | string | | pair | string | | asks | []depthOrder | | bids | []depthOrder | - Структура **DepthOrder** ``` type DepthOrder struct{ Price float64 BaseQty float64 } ``` - Таблица **order_history** | Столбец | Тип данных | |-----------------------|------------| | client_name | string | | exchange_name | string | | label | string | | pair | string | | side | string | | type | string | | base_qty | float64 | | price | float64 | | algorithm_name_placed | string | | lowest_sell_prc | float64 | | highest_buy_prc | float64 | | commission_quote_qty | float64 | | time_placed | time.Time | - Структура **HistoryOrder** ``` type HistoryOrder struct{ client_name string exchange_name string label string pair string side string type string base_qty float64 price float64 algorithm_name_placed string lowest_sell_prc float64 highest_buy_prc float64 commission_quote_qty float64 time_placed time.Time } ``` - Структура **Client** ``` type Client struct{ client_name string exchange_name string label string pair string } ```