refactor: consolidate exact post dispatch
This commit is contained in:
+43
-79
@@ -507,6 +507,40 @@ class DashboardService(
|
||||
SERVICE = DashboardService()
|
||||
|
||||
|
||||
PUBLIC_POST_HANDLERS = {
|
||||
"/api/auth/register": "auth_register",
|
||||
"/api/auth/login": "auth_login",
|
||||
}
|
||||
|
||||
AUTHENTICATED_POST_HANDLERS = {
|
||||
"/api/auth/logout": "auth_logout",
|
||||
"/api/account/birth-profile": "save_birth_profile",
|
||||
"/api/account/password": "change_password",
|
||||
"/api/alerts": "save_alert",
|
||||
"/api/trades": "save_trade_entry",
|
||||
"/api/assistant/chat": "stream_assistant_chat",
|
||||
"/api/admin/settings": "save_system_settings",
|
||||
"/api/admin/settings/test": "test_system_llm_settings",
|
||||
"/api/admin/membership": "save_membership",
|
||||
"/api/admin/refresh": "start_background_refresh",
|
||||
"/api/watchlist": "save_watchlist",
|
||||
"/api/notes": "save_note",
|
||||
"/api/reasons": "save_reason",
|
||||
"/api/seat-aliases": "save_seat_alias",
|
||||
"/api/heaven/sector-phases": "save_sector_phase_override",
|
||||
"/api/backfill": "backfill_data",
|
||||
"/api/screener/sync": "sync_screener_data",
|
||||
"/api/screener/compile": "compile_screener_strategy",
|
||||
"/api/screener/strategies": "save_screener_strategy",
|
||||
"/api/screener/run": "run_screener",
|
||||
"/api/screener/tracking/refresh": "refresh_screener_tracking",
|
||||
"/api/mentors/chat": "stream_mentor_chat",
|
||||
"/api/heaven/hexagram": "heaven_hexagram",
|
||||
"/api/heaven/personal": "heaven_personal",
|
||||
"/api/heaven/interpret": "heaven_interpret",
|
||||
}
|
||||
|
||||
|
||||
class RequestHandler(
|
||||
AccountHttpMixin,
|
||||
SystemHttpMixin,
|
||||
@@ -522,6 +556,13 @@ class RequestHandler(
|
||||
application_service = SERVICE
|
||||
route_registry = ROUTES
|
||||
|
||||
def _dispatch_named_handler(self, path: str, handlers: dict[str, str]) -> bool:
|
||||
handler_name = handlers.get(path)
|
||||
if handler_name is None:
|
||||
return False
|
||||
getattr(self, handler_name)()
|
||||
return True
|
||||
|
||||
def do_GET(self) -> None:
|
||||
parsed = urlparse(self.path)
|
||||
if parsed.path == "/api/health":
|
||||
@@ -864,24 +905,13 @@ class RequestHandler(
|
||||
|
||||
def do_POST(self) -> None:
|
||||
parsed = urlparse(self.path)
|
||||
if parsed.path == "/api/auth/register":
|
||||
self.auth_register()
|
||||
return
|
||||
if parsed.path == "/api/auth/login":
|
||||
self.auth_login()
|
||||
if self._dispatch_named_handler(parsed.path, PUBLIC_POST_HANDLERS):
|
||||
return
|
||||
if not self.require_auth() or not self.require_csrf():
|
||||
return
|
||||
if not self.require_access("POST", parsed.path):
|
||||
return
|
||||
if parsed.path == "/api/auth/logout":
|
||||
self.auth_logout()
|
||||
return
|
||||
if parsed.path == "/api/account/birth-profile":
|
||||
self.save_birth_profile()
|
||||
return
|
||||
if parsed.path == "/api/account/password":
|
||||
self.change_password()
|
||||
if self._dispatch_named_handler(parsed.path, AUTHENTICATED_POST_HANDLERS):
|
||||
return
|
||||
alert_read_match = re.fullmatch(r"/api/alerts/(\d+)/read", parsed.path)
|
||||
if alert_read_match:
|
||||
@@ -895,57 +925,6 @@ class RequestHandler(
|
||||
{"ok": True, **SERVICE.mark_all_alerts_read(str(body.get("as_of") or ""))}
|
||||
)
|
||||
return
|
||||
if parsed.path == "/api/alerts":
|
||||
self.save_alert()
|
||||
return
|
||||
if parsed.path == "/api/trades":
|
||||
self.save_trade_entry()
|
||||
return
|
||||
if parsed.path == "/api/assistant/chat":
|
||||
self.stream_assistant_chat()
|
||||
return
|
||||
if parsed.path == "/api/admin/settings":
|
||||
self.save_system_settings()
|
||||
return
|
||||
if parsed.path == "/api/admin/settings/test":
|
||||
self.test_system_llm_settings()
|
||||
return
|
||||
if parsed.path == "/api/admin/membership":
|
||||
self.save_membership()
|
||||
return
|
||||
if parsed.path == "/api/admin/refresh":
|
||||
self.start_background_refresh()
|
||||
return
|
||||
if parsed.path == "/api/watchlist":
|
||||
self.save_watchlist()
|
||||
return
|
||||
if parsed.path == "/api/notes":
|
||||
self.save_note()
|
||||
return
|
||||
if parsed.path == "/api/reasons":
|
||||
self.save_reason()
|
||||
return
|
||||
if parsed.path == "/api/seat-aliases":
|
||||
self.save_seat_alias()
|
||||
return
|
||||
if parsed.path == "/api/heaven/sector-phases":
|
||||
self.save_sector_phase_override()
|
||||
return
|
||||
if parsed.path == "/api/backfill":
|
||||
self.backfill_data()
|
||||
return
|
||||
if parsed.path == "/api/screener/sync":
|
||||
self.sync_screener_data()
|
||||
return
|
||||
if parsed.path == "/api/screener/compile":
|
||||
self.compile_screener_strategy()
|
||||
return
|
||||
if parsed.path == "/api/screener/strategies":
|
||||
self.save_screener_strategy()
|
||||
return
|
||||
if parsed.path == "/api/screener/run":
|
||||
self.run_screener()
|
||||
return
|
||||
if parsed.path == "/api/screener/tracking":
|
||||
try:
|
||||
result = SERVICE.add_screener_tracking(self.read_json_body())
|
||||
@@ -953,9 +932,6 @@ class RequestHandler(
|
||||
except (ValueError, json.JSONDecodeError) as exc:
|
||||
self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
|
||||
return
|
||||
if parsed.path == "/api/screener/tracking/refresh":
|
||||
self.refresh_screener_tracking()
|
||||
return
|
||||
if parsed.path == "/api/mentors/preferences":
|
||||
try:
|
||||
result = SERVICE.save_mentor_preferences(self.read_json_body())
|
||||
@@ -963,18 +939,6 @@ class RequestHandler(
|
||||
except (ValueError, json.JSONDecodeError) as exc:
|
||||
self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST)
|
||||
return
|
||||
if parsed.path == "/api/mentors/chat":
|
||||
self.stream_mentor_chat()
|
||||
return
|
||||
if parsed.path == "/api/heaven/hexagram":
|
||||
self.heaven_hexagram()
|
||||
return
|
||||
if parsed.path == "/api/heaven/personal":
|
||||
self.heaven_personal()
|
||||
return
|
||||
if parsed.path == "/api/heaven/interpret":
|
||||
self.heaven_interpret()
|
||||
return
|
||||
self.send_json({"error": "Not found"}, HTTPStatus.NOT_FOUND)
|
||||
|
||||
def do_DELETE(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user