101 lines
3.4 KiB
Markdown
101 lines
3.4 KiB
Markdown
|
## Общие сведения
|
|||
|
- **Название проекта:** Сервис сбора статистики
|
|||
|
- **Описание проекта:** Микросервис на *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
|
|||
|
}
|
|||
|
```
|