Stage 05.7 - trade draft UI restructuring and order context display

This commit is contained in:
2026-04-19 15:43:22 +03:00
parent 39b35d742a
commit cec7c761be
21 changed files with 2030 additions and 1243 deletions

View File

@@ -1 +0,0 @@
docs_stage-03-3-exchange-info

View File

@@ -0,0 +1,241 @@
# Stage 05.7 — trade draft UI restructuring and order context display
## Что сделано
На этом этапе был завершён крупный блок улучшений сценария создания черновика ордера в разделе **Торговля**.
Основные изменения:
- переработан UI сценария нового ордера
- вынесены и унифицированы экранные рендеры
- вынесены части логики в отдельные файлы
- добавлено отображение контекста ордера на ключевых экранах
- добавлены валюта котировки и базовый актив в отображение параметров ордера
- улучшена работа экранов черновиков
- введена общая UI-линия режима аккаунта
- подготовлена база для дальнейшей декомпозиции trade-модуля
---
## Структурные изменения
### Разделение сценария нового ордера
Монолитный сценарий `new_order.py` был разложен на логические части:
- `new_order_core.py` — общая точка ядра сценария
- `new_order_flow.py` — основной FSM flow создания/редактирования черновика
- `new_order_navigation.py` — навигационные переходы и back-логика
- `new_order_ui.py` — клавиатуры, рендеры экранов, форматирование и список черновиков
- `new_order.py` — точка сборки роутеров сценария
Это позволило уменьшить связанность кода и подготовить модуль к дальнейшему безопасному рефакторингу.
---
## UI и UX улучшения
### 1. Единый стиль экранов Trade
Интерфейс экранов нового ордера приведён к единому стилю:
- единый заголовок
- единая строка режима аккаунта
- единый формат шагов сценария
- единый стиль ошибок и подтверждений
### 2. Отображение контекста ордера
На экранах сценария теперь показываются:
- количество с базовым активом
пример: `0.01 BTC`
- цена с валютой котировки
пример: `84500.00 USD`
- сумма ордера с валютой котировки
пример: `845.00 USD`
### 3. Улучшение экранов ручного ввода
Для ручного ввода количества и цены теперь отображаются:
- шаг
- минимальный допустимый ввод
- оценочная сумма ордера
- пример корректного значения
- ориентир цены с валютой котировки
### 4. Улучшение экрана подтверждения
На шаге подтверждения черновика теперь выводятся:
- инструмент
- сторона
- тип ордера
- количество с активом
- цена или ориентир цены
- итоговая сумма ордера
---
## Логика ордера
### Контекст входа в ордер
Сервис формирования черновика теперь возвращает расширенный `OrderEntryContext`, в котором учитываются:
- `balance_currency`
- `quote_currency`
- `base_currency`
- `reference_price`
- `available_balance`
- `bid_price`
- `ask_price`
- `last_price`
### Валюты и активы
Добавлена корректная работа с:
- `base_currency` — актив инструмента
- `quote_currency` — валюта котировки
Это позволило явно показывать пользователю, в каких единицах отображаются:
- количество
- цена
- сумма
### Защита от некорректного символа инструмента
Если биржа не возвращает `base_asset` или `quote_asset`, сервис больше не продолжает работу молча, а:
- логирует ошибку
- поднимает исключение
- предотвращает некорректный расчёт контекста ордера
---
## Черновики
### Список черновиков
Экран последних черновиков был обновлён и приведён к общему стилю.
Поддерживается:
- список последних записей
- пагинация
- открытие карточки черновика
- переход в редактирование
- возврат назад
### Детальный экран черновика
На экране конкретного черновика теперь корректно отображаются:
- количество с активом
- цена с валютой
- статус
- время создания
---
## Навигация и FSM
### Улучшение сценарных переходов
Были исправлены и стабилизированы переходы между шагами:
- side → type
- type → quantity
- quantity → price
- price → confirm
- manual quantity back
- manual price back
- confirm back
### Поддержка edit mode
Сценарий редактирования черновика теперь использует тот же улучшенный UI и повторно использует общий flow.
---
## Общая UI инфраструктура
### Единая mode line
Строка режима аккаунта была унифицирована через общую функцию:
- один источник правды
- единое отображение на разных экранах
- отсутствие дублирования в нескольких обработчиках
---
## Документация
Добавлен файл:
- `docs/terminology.md`
Он фиксирует соответствие между:
- терминологией биржи
- терминологией UI бота
- внутренними именами в коде
Это нужно для снижения путаницы перед следующими этапами развития торгового модуля.
---
## Какие файлы были затронуты
### Trade / order draft
- `app/src/telegram/handlers/trade/new_order.py`
- `app/src/telegram/handlers/trade/new_order_core.py`
- `app/src/telegram/handlers/trade/new_order_flow.py`
- `app/src/telegram/handlers/trade/new_order_navigation.py`
- `app/src/telegram/handlers/trade/new_order_ui.py`
- `app/src/telegram/handlers/trade/main.py`
### Trading domain
- `app/src/trading/orders/models.py`
- `app/src/trading/orders/service.py`
### Общий UI / menu / handlers
- `app/src/telegram/ui/`
- `app/src/telegram/keyboards/reply.py`
- `app/src/telegram/handlers/start.py`
- `app/src/telegram/handlers/home.py`
- `app/src/telegram/handlers/system.py`
- `app/src/telegram/handlers/market.py`
- `app/src/telegram/handlers/portfolio.py`
- `app/src/telegram/handlers/auto.py`
- `app/src/telegram/handlers/journal.py`
### Docs
- `docs/terminology.md`
---
## Результат этапа
После завершения Stage 05.7 модуль trade draft flow стал:
- понятнее по структуре
- стабильнее по FSM-переходам
- чище по UI
- информативнее для пользователя
- готовым к следующему этапу декомпозиции и UX-улучшений
---
## Что подготовлено для следующего этапа
Этот этап подготовил основу для:
- отображения пути формируемого ордера на каждом шаге
- дальнейшего дробления trade-модуля
- выноса navigation/drafts/ui в ещё более чистую структуру
- перехода к терминологии, ближе к терминологии биржи