30 lines
968 B
Python
30 lines
968 B
Python
"""Top-level, read-only scope fit guide at ``/scopes``.
|
|
|
|
The site's primary view: a table of scopes with their specs, plus one column per
|
|
non-Scope part type listing the accessories that fit each scope.
|
|
"""
|
|
|
|
from fastapi import APIRouter, Depends, Request
|
|
from fastapi.responses import HTMLResponse
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.core.database import get_db
|
|
from app.models.user import User
|
|
from app.services import scope_guide as scope_guide_service
|
|
from app.web.admin import web_require
|
|
from app.web.templates import templates
|
|
|
|
router = APIRouter(include_in_schema=False)
|
|
|
|
|
|
@router.get("/scopes", response_class=HTMLResponse)
|
|
async def scopes_page(
|
|
request: Request,
|
|
db: AsyncSession = Depends(get_db),
|
|
user: User = Depends(web_require("augmented_parts:read", "fits:read")),
|
|
):
|
|
guide = await scope_guide_service.build(db)
|
|
return templates.TemplateResponse(
|
|
request, "scopes.html", {"user": user, **guide}
|
|
)
|