from __future__ import annotations from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.database import get_db from app.auth import get_current_user from app.models.navigation import NavHeader, NavFooterGroup, NavFooterLink from app.schemas.navigation import NavigationSchema router = APIRouter(prefix="/api/navigation", tags=["导航菜单"], dependencies=[Depends(get_current_user)]) @router.get("/", response_model=NavigationSchema) def get_navigation(db: Session = Depends(get_db)): headers = db.query(NavHeader).order_by(NavHeader.sort_order).all() groups = db.query(NavFooterGroup).order_by(NavFooterGroup.sort_order).all() return NavigationSchema( header=[{"text": h.text, "to": h.to_path} for h in headers], footer=[ {"title": g.title, "links": [{"text": l.text, "to": l.to_path} for l in g.links]} for g in groups ], ) @router.put("/") def update_navigation(req: NavigationSchema, db: Session = Depends(get_db)): # Replace header db.query(NavHeader).delete() for i, h in enumerate(req.header): db.add(NavHeader(text=h.text, to_path=h.to, sort_order=i)) # Replace footer db.query(NavFooterLink).delete() db.query(NavFooterGroup).delete() for i, g in enumerate(req.footer): group = NavFooterGroup(title=g.title, sort_order=i) db.add(group) db.flush() for j, link in enumerate(g.links): db.add(NavFooterLink(group_id=group.id, text=link.text, to_path=link.to, sort_order=j)) db.commit() return {"message": "导航更新成功"}