This commit is contained in:
2026-07-08 14:24:50 +08:00
parent 5545af003f
commit 2882d37112
7 changed files with 388 additions and 133 deletions
+1 -58
View File
@@ -2,11 +2,9 @@ from fastapi import APIRouter, Depends
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.dependencies import get_db, get_admin_user, get_backend_user, get_current_user
from app.dependencies import get_db, get_current_user
from app.models.user import User
from app.models.menu_config import MenuConfig
from app.schemas.menu import MenuConfigCreate, MenuConfigOut
from app.utils.id_gen import generate_id
router = APIRouter(tags=["menu-configs"])
@@ -57,58 +55,3 @@ async def public_list_menu_configs(
}
for m in menus
]
@router.get("/admin/menu-configs", response_model=list[MenuConfigOut])
async def admin_list_menu_configs(
admin: User = Depends(get_backend_user),
db: AsyncSession = Depends(get_db),
):
result = await db.execute(select(MenuConfig).order_by(MenuConfig.sort_order))
return result.scalars().all()
@router.post("/admin/menu-configs", response_model=MenuConfigOut)
async def create_menu_config(
req: MenuConfigCreate,
admin: User = Depends(get_admin_user),
db: AsyncSession = Depends(get_db),
):
menu = MenuConfig(id=generate_id(), **req.model_dump())
db.add(menu)
await db.flush()
return menu
@router.put("/admin/menu-configs/{menu_id}", response_model=MenuConfigOut)
async def update_menu_config(
menu_id: str,
req: MenuConfigCreate,
admin: User = Depends(get_admin_user),
db: AsyncSession = Depends(get_db),
):
result = await db.execute(select(MenuConfig).where(MenuConfig.id == menu_id).limit(1))
menu = result.scalar_one_or_none()
if not menu:
from fastapi import HTTPException, status
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="菜单不存在")
for k, v in req.model_dump().items():
setattr(menu, k, v)
await db.flush()
return menu
@router.delete("/admin/menu-configs/{menu_id}")
async def delete_menu_config(
menu_id: str,
admin: User = Depends(get_admin_user),
db: AsyncSession = Depends(get_db),
):
result = await db.execute(select(MenuConfig).where(MenuConfig.id == menu_id).limit(1))
menu = result.scalar_one_or_none()
if not menu:
from fastapi import HTTPException, status
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="菜单不存在")
await db.delete(menu)
await db.flush()
return {"message": "ok"}