feat(dashboard): GET /api/dashboard endpoint
CI & Build / Python lint (push) Successful in 2s
CI & Build / TypeScript typecheck (push) Successful in 34s
CI & Build / Python tests (push) Successful in 44s
CI & Build / Build & push image (push) Successful in 1m17s

Task 2 of #583. Minimal login-gated blueprint returning build_dashboard(uid);
registered in the app factory.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-02 23:22:08 -04:00
parent 6a3619555d
commit 7ef7d10b24
3 changed files with 33 additions and 0 deletions
+2
View File
@@ -27,6 +27,7 @@ from fabledassistant.routes.profile import profile_bp
from fabledassistant.routes.knowledge import knowledge_bp from fabledassistant.routes.knowledge import knowledge_bp
from fabledassistant.routes.rulebooks import rulebooks_bp from fabledassistant.routes.rulebooks import rulebooks_bp
from fabledassistant.routes.trash import trash_bp from fabledassistant.routes.trash import trash_bp
from fabledassistant.routes.dashboard import dashboard_bp
from fabledassistant.mcp import mount_mcp from fabledassistant.mcp import mount_mcp
STATIC_DIR = Path(__file__).parent / "static" STATIC_DIR = Path(__file__).parent / "static"
@@ -87,6 +88,7 @@ def create_app() -> Quart:
app.register_blueprint(knowledge_bp) app.register_blueprint(knowledge_bp)
app.register_blueprint(rulebooks_bp) app.register_blueprint(rulebooks_bp)
app.register_blueprint(trash_bp) app.register_blueprint(trash_bp)
app.register_blueprint(dashboard_bp)
@app.before_request @app.before_request
async def before_request(): async def before_request():
+13
View File
@@ -0,0 +1,13 @@
"""Dashboard REST endpoint — the aggregated landing payload."""
from quart import Blueprint, g, jsonify
from fabledassistant.auth import login_required
from fabledassistant.services.dashboard import build_dashboard
dashboard_bp = Blueprint("dashboard", __name__, url_prefix="/api/dashboard")
@dashboard_bp.get("")
@login_required
async def get_dashboard():
return jsonify(await build_dashboard(g.user.id))
+18
View File
@@ -0,0 +1,18 @@
"""Structural tests for the dashboard blueprint."""
def test_dashboard_blueprint_registered():
from fabledassistant.routes.dashboard import dashboard_bp
assert dashboard_bp.name == "dashboard"
assert dashboard_bp.url_prefix == "/api/dashboard"
def test_dashboard_blueprint_registered_in_app():
from fabledassistant.app import create_app
app = create_app()
assert "dashboard" in app.blueprints
def test_dashboard_handler_callable():
from fabledassistant.routes import dashboard as dashboard_routes
assert callable(dashboard_routes.get_dashboard)