Веб-приложение для торговой платформы (биржи) на FastAPI. Поддерживает лимитные и рыночные ордера, управление балансом и инвентарём инструментов. Проект от Точка Банк.
- Аутентификация — JWT-токены с префиксом
TOKEN - Ордера — лимитные и рыночные ордера на покупку/продажу
- Orderbook — агрегированный стакан заявок (bid/ask levels)
- Транзакции — история сделок по инструментам
- Баланс — управление балансом и инвентарём пользователей
- Админ-панель — управление пользователями, инструментами и балансами
- Docker — полная контейнеризация с PostgreSQL и Nginx
- Docker
- Docker Compose
# Клонирование репозитория
git clone <repository-url>
cd <repository-name>
# Запуск всех сервисов
docker-compose up --buildПосле запуска доступны:
| Сервис | URL |
|---|---|
| API | http://localhost/api/v1 |
| Nginx | http://localhost:80 |
| PostgreSQL | localhost:5433 |
| Метод | Путь | Описание |
|---|---|---|
POST |
/api/v1/public/register |
Регистрация пользователя |
GET |
/api/v1/public/instrument |
Список инструментов |
GET |
/api/v1/public/orderbook/{ticker} |
Стакан заявок |
GET |
/api/v1/public/transactions/{ticker} |
История транзакций |
| Метод | Путь | Описание |
|---|---|---|
GET |
/api/v1/order |
Список ордеров пользователя |
POST |
/api/v1/order |
Создание ордера |
GET |
/api/v1/order/{order_id} |
Получить ордер |
DELETE |
/api/v1/order/{order_id} |
Отмена ордера |
| Метод | Путь | Описание |
|---|---|---|
GET |
/api/v1/balance |
Баланс пользователя |
| Метод | Путь | Описание |
|---|---|---|
POST |
/api/v1/admin/instrument |
Создание инструмента |
DELETE |
/api/v1/admin/instrument/{ticker} |
Удаление инструмента |
POST |
/api/v1/admin/balance/deposit |
Пополнение баланса |
POST |
/api/v1/admin/balance/withdraw |
Снятие баланса |
DELETE |
/api/v1/admin/user/{user_id} |
Удаление пользователя |
API использует JWT-токены с префиксом TOKEN.
Заголовок:
Authorization: TOKEN <jwt_token>
При регистрации возвращается api_key — ваш токен для дальнейших запросов.
curl -X POST http://localhost/api/v1/public/register \
-H "Content-Type: application/json" \
-d '{"name": "username"}'Ответ:
{
"name": "username",
"id": "uuid-...",
"role": "user",
"api_key": "eyJ..."
}curl -X POST http://localhost/api/v1/order \
-H "Authorization: TOKEN <api_key>" \
-H "Content-Type: application/json" \
-d '{"direction": "BUY", "ticker": "MEMECOIN", "qty": 10, "price": 100}'curl http://localhost/api/v1/public/orderbook/MEMECOINОтвет:
{
"bid_levels": [{"price": 100, "qty": 5}],
"ask_levels": [{"price": 110, "qty": 3}]
}