"""Handbook read-only fact API — feeds the in-product 系统手册 live tables. All endpoints are all-staff (``get_current_user``, any authenticated user) and read-only. See :mod:`app.domains.handbook` for the non-sensitivity contract. """ from __future__ import annotations from fastapi import APIRouter, Depends, Request from sqlalchemy.ext.asyncio import AsyncSession from app.auth.models import AuthUser from app.core.database import get_db from app.core.dependencies import get_current_user from app.core.response import success_response from app.domains.handbook import service router = APIRouter(prefix="/api/v1/handbook", tags=["handbook"]) @router.get("/scheduled-jobs", summary="All scheduled jobs (key/schedule/domain/enabled)") async def scheduled_jobs( request: Request, current_user: AuthUser = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): data = await service.list_scheduled_jobs(db) return success_response(data=data, request=request) @router.get("/connectors", summary="All integration drivers (kind/provider/capabilities/enabled)") async def connectors( request: Request, current_user: AuthUser = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): data = await service.list_connectors(db) return success_response(data=data, request=request) @router.get("/rbac-roles", summary="The 9 canonical roles + manager-derived scope") async def rbac_roles( request: Request, current_user: AuthUser = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): data = await service.list_rbac_roles(db) return success_response(data=data, request=request)