from __future__ import annotations from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from shared.models.menu_node import MenuNode async def get_navigation_tree(session: AsyncSession) -> list[MenuNode]: """ Return top-level menu nodes ordered by sort_order. All apps call this directly (shared DB) — no more HTTP API. """ result = await session.execute( select(MenuNode) .where(MenuNode.deleted_at.is_(None), MenuNode.depth == 0) .order_by(MenuNode.sort_order.asc(), MenuNode.id.asc()) ) return list(result.scalars().all()) async def rebuild_navigation(session: AsyncSession) -> None: """ Rebuild menu_nodes from container_relations. Called by event handlers when relationships change. Currently a no-op placeholder — menu nodes are managed directly by the admin UI. When the full relationship-driven nav is needed, this will sync ContainerRelation -> MenuNode. """ pass