"""HTTP routes for the MinerOps Internal Alpha application shell.""" from pathlib import Path from typing import Annotated from fastapi import APIRouter, Depends from fastapi.responses import HTMLResponse, Response from app.frontend.views import render_app_page from app.identity import require_permission, user_has_permission router = APIRouter(tags=["frontend"]) STATIC_ROOT = Path(__file__).with_name("static") DashboardUser = Annotated[dict, Depends(require_permission("dashboard.view"))] MapUser = Annotated[dict, Depends(require_permission("locations.view"))] RepairUser = Annotated[dict, Depends(require_permission("repairs.view"))] MinerUser = Annotated[dict, Depends(require_permission("miners.view"))] def render_page(view: str, current_user: dict) -> str: return render_app_page( view, current_user, lambda permission: user_has_permission(current_user, permission), ) @router.get("/assets/minerops-app.css", include_in_schema=False) def frontend_styles() -> Response: return Response( (STATIC_ROOT / "app.css").read_text(encoding="utf-8"), media_type="text/css", headers={"Cache-Control": "no-store"}, ) @router.get("/assets/minerops-app.js", include_in_schema=False) def frontend_script() -> Response: return Response( (STATIC_ROOT / "app.js").read_text(encoding="utf-8"), media_type="text/javascript", headers={"Cache-Control": "no-store"}, ) @router.get("/dashboard", response_class=HTMLResponse, include_in_schema=False) def dashboard_page(current_user: DashboardUser) -> str: return render_page("dashboard", current_user) @router.get( "/monitoring/map", response_class=HTMLResponse, include_in_schema=False, ) def mine_map_page(current_user: MapUser) -> str: return render_page("map", current_user) @router.get( "/operations/repairs", response_class=HTMLResponse, include_in_schema=False, ) def repair_center_page(current_user: RepairUser) -> str: return render_page("repairs", current_user) @router.get( "/assets/miners", response_class=HTMLResponse, include_in_schema=False, ) def miners_page(current_user: MinerUser) -> str: return render_page("miners", current_user)