refactor: establish standalone application boundary
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from datetime import date
|
||||
from http import HTTPStatus
|
||||
from urllib.parse import parse_qs
|
||||
|
||||
|
||||
class ReviewRoutesMixin:
|
||||
def _handle_review_get(self, parsed) -> bool:
|
||||
if parsed.path == "/api/trades":
|
||||
query = parse_qs(parsed.query)
|
||||
try:
|
||||
self.send_json(
|
||||
self.application_service.trade_entries(
|
||||
query.get("start_date", [""])[0],
|
||||
query.get("end_date", [""])[0],
|
||||
query.get("code", [""])[0],
|
||||
)
|
||||
)
|
||||
except ValueError as exc:
|
||||
self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
|
||||
return True
|
||||
if parsed.path == "/api/assistant/messages":
|
||||
self.send_json({"items": self.application_service.assistant_messages()})
|
||||
return True
|
||||
if parsed.path == "/api/watchlist":
|
||||
query = parse_qs(parsed.query)
|
||||
try:
|
||||
self.send_json(
|
||||
self.application_service.review_watchlist(
|
||||
query.get("trade_date", [date.today().isoformat()])[0]
|
||||
)
|
||||
)
|
||||
except ValueError as exc:
|
||||
self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
|
||||
return True
|
||||
if parsed.path == "/api/notes":
|
||||
query = parse_qs(parsed.query)
|
||||
code = query.get("code", [""])[0]
|
||||
trade_date = query.get("trade_date", [""])[0].replace("-", "")
|
||||
scope = query.get("scope", ["all"])[0]
|
||||
if scope not in {"all", "daily", "stock"}:
|
||||
self.send_json({"error": "复盘记录范围不支持。"}, HTTPStatus.BAD_REQUEST)
|
||||
return True
|
||||
self.send_json(
|
||||
{
|
||||
"items": self.application_service.database.list_notes(
|
||||
self.application_service.current_user_id, code, trade_date, scope
|
||||
)
|
||||
}
|
||||
)
|
||||
return True
|
||||
return False
|
||||
|
||||
def _handle_review_delete(self, parsed) -> bool:
|
||||
if parsed.path == "/api/assistant/messages":
|
||||
deleted = self.application_service.clear_assistant_messages()
|
||||
self.send_json({"ok": True, "deleted": deleted})
|
||||
return True
|
||||
watchlist_match = re.fullmatch(r"/api/watchlist/(\d{6})", parsed.path)
|
||||
if watchlist_match:
|
||||
deleted = self.application_service.database.delete_watchlist(
|
||||
self.application_service.current_user_id, watchlist_match.group(1)
|
||||
)
|
||||
self.send_json({"ok": True, "deleted": deleted})
|
||||
return True
|
||||
note_match = re.fullmatch(r"/api/notes/(\d+)", parsed.path)
|
||||
if note_match:
|
||||
deleted = self.application_service.database.delete_note(
|
||||
self.application_service.current_user_id, int(note_match.group(1))
|
||||
)
|
||||
self.send_json({"ok": True, "deleted": deleted})
|
||||
return True
|
||||
trade_match = re.fullmatch(r"/api/trades/(\d+)", parsed.path)
|
||||
if trade_match:
|
||||
self.send_json(
|
||||
{"ok": True, **self.application_service.delete_trade_entry(int(trade_match.group(1)))}
|
||||
)
|
||||
return True
|
||||
return False
|
||||
Reference in New Issue
Block a user