45 行
1.6 KiB
Python
45 行
1.6 KiB
Python
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": "导航更新成功"}
|