import logging from fastapi import APIRouter, Query from app.controllers.menu import menu_controller from app.schemas.base import BaseResponse, Fail, Success from app.schemas.menus import * logger = logging.getLogger(__name__) router = APIRouter() @router.get("/list", summary="查看菜单列表") async def list_menu( page: int = Query(1, description="页码"), page_size: int = Query(10, description="每页数量"), ) -> MenuOutList: parent_menus = await menu_controller.model.filter(parent_id=0).order_by("order") res_menu = [] for menu in parent_menus: child_menu = await menu_controller.model.filter(parent_id=menu.id).order_by("order") menu_dict = await menu.to_dict() menu_dict["children"] = child_menu res_menu.append(menu_dict) return SuccessExtra(data=res_menu, total=len(res_menu), page=page, page_size=page_size) @router.get("/get", summary="查看菜单") async def get_menu( menu_id: int = Query(..., description="菜单id"), ) -> BaseResponse: result = await menu_controller.get(id=menu_id) return Success(data=result) @router.post("/create", summary="创建菜单") async def create_menu( menu_in: MenuCreate, ) -> BaseResponse: await menu_controller.create(obj_in=menu_in) return Success(msg="Created Success") @router.post("/update", summary="更新菜单") async def update_menu( menu_in: MenuUpdate, ) -> BaseResponse: await menu_controller.update(id=menu_in.id, obj_in=menu_in.update_dict()) return Success(msg="Updated Success") @router.delete("/delete", summary="删除菜单") async def delete_menu( id: int = Query(..., description="菜单id"), ) -> BaseResponse: child_menu_count = await menu_controller.model.filter(parent_id=id).count() if child_menu_count > 0: return Fail(msg="Cannot delete a menu with child menus") await menu_controller.remove(id=id) return Success(msg="Deleted Success")