Stage 05.1 - order draft flow
This commit is contained in:
1
app/src/trading/orders/__init__.py
Normal file
1
app/src/trading/orders/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Package marker."""
|
||||
12
app/src/trading/orders/models.py
Normal file
12
app/src/trading/orders/models.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class OrderDraft:
|
||||
symbol: str
|
||||
side: str
|
||||
order_type: str
|
||||
quantity: str
|
||||
status: str = "draft"
|
||||
55
app/src/trading/orders/service.py
Normal file
55
app/src/trading/orders/service.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from src.core.config import load_settings
|
||||
from src.storage.repositories.order_drafts import OrderDraftRepository
|
||||
from src.trading.journal.service import JournalService
|
||||
from src.trading.orders.models import OrderDraft
|
||||
|
||||
|
||||
class OrderDraftsService:
|
||||
def __init__(self) -> None:
|
||||
self.settings = load_settings()
|
||||
self.repository = OrderDraftRepository()
|
||||
self.journal = JournalService()
|
||||
|
||||
def create_default_draft(self) -> OrderDraft:
|
||||
draft = OrderDraft(
|
||||
symbol=self.settings.default_symbol,
|
||||
side="BUY",
|
||||
order_type="MARKET",
|
||||
quantity="0.001",
|
||||
status="draft",
|
||||
)
|
||||
self._save_draft(draft)
|
||||
return draft
|
||||
|
||||
def _save_draft(self, draft: OrderDraft) -> None:
|
||||
self.repository.add_draft(
|
||||
symbol=draft.symbol,
|
||||
side=draft.side,
|
||||
order_type=draft.order_type,
|
||||
quantity=draft.quantity,
|
||||
status=draft.status,
|
||||
payload={
|
||||
"source": "trade_screen",
|
||||
"mode": "draft_only",
|
||||
},
|
||||
)
|
||||
|
||||
try:
|
||||
self.journal.log_info(
|
||||
"order_draft_saved",
|
||||
"Черновик ордера сохранён.",
|
||||
{
|
||||
"symbol": draft.symbol,
|
||||
"side": draft.side,
|
||||
"order_type": draft.order_type,
|
||||
"quantity": draft.quantity,
|
||||
"status": draft.status,
|
||||
},
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def list_recent_drafts(self, limit: int = 5) -> list[dict[str, str]]:
|
||||
return self.repository.list_recent_drafts(limit=limit)
|
||||
Reference in New Issue
Block a user