feat(db): wire inventory router to SQLAlchemy session via Depends(get_db)
CI / basic-check (push) Has been cancelled

This commit is contained in:
2026-08-06 16:02:05 +00:00
parent 143baddf0a
commit 5c09359ee8
+19 -11
View File
@@ -1,5 +1,7 @@
from fastapi import APIRouter, HTTPException, Query from fastapi import APIRouter, Depends, HTTPException, Query
from sqlalchemy.orm import Session
from app.database import get_db
from app.schemas import EntityResponse, InventoryTreeNode, ListResponse, NodeContext, Relation from app.schemas import EntityResponse, InventoryTreeNode, ListResponse, NodeContext, Relation
from app.services.inventory import build_inventory_tree, build_node_context, get_badges, get_node_relations from app.services.inventory import build_inventory_tree, build_node_context, get_badges, get_node_relations
@@ -10,30 +12,35 @@ router = APIRouter(prefix='/inventory', tags=['inventory'])
def inventory_tree( def inventory_tree(
root_id: str | None = None, root_id: str | None = None,
depth: int | None = Query(default=None, ge=0), depth: int | None = Query(default=None, ge=0),
) -> ListResponse[InventoryTreeNode]: db: Session = Depends(get_db),
items = build_inventory_tree(root_id=root_id, depth=depth) ):
items = build_inventory_tree(db, root_id=root_id, depth=depth)
return ListResponse(count=len(items), items=items) return ListResponse(count=len(items), items=items)
@router.get('/tree/{item_id}', response_model=EntityResponse[InventoryTreeNode]) @router.get('/tree/{item_id}', response_model=EntityResponse[InventoryTreeNode])
def inventory_subtree(item_id: str, depth: int | None = Query(default=None, ge=0)) -> EntityResponse[InventoryTreeNode]: def inventory_subtree(
items = build_inventory_tree(root_id=item_id, depth=depth) item_id: str,
depth: int | None = Query(default=None, ge=0),
db: Session = Depends(get_db),
):
items = build_inventory_tree(db, root_id=item_id, depth=depth)
if not items: if not items:
raise HTTPException(status_code=404, detail='Inventory node not found') raise HTTPException(status_code=404, detail='Inventory node not found')
return EntityResponse(item=items[0]) return EntityResponse(item=items[0])
@router.get('/nodes/{item_id}/context', response_model=EntityResponse[NodeContext]) @router.get('/nodes/{item_id}/context', response_model=EntityResponse[NodeContext])
def node_context(item_id: str) -> EntityResponse[NodeContext]: def node_context(item_id: str, db: Session = Depends(get_db)):
item = build_node_context(item_id) item = build_node_context(db, item_id)
if not item: if not item:
raise HTTPException(status_code=404, detail='Inventory node not found') raise HTTPException(status_code=404, detail='Inventory node not found')
return EntityResponse(item=item) return EntityResponse(item=item)
@router.get('/nodes/{item_id}/badges', response_model=ListResponse[str]) @router.get('/nodes/{item_id}/badges', response_model=ListResponse[str])
def node_badges(item_id: str) -> ListResponse[str]: def node_badges(item_id: str, db: Session = Depends(get_db)):
badges = get_badges(item_id) badges = get_badges(db, item_id)
return ListResponse(count=len(badges), items=badges) return ListResponse(count=len(badges), items=badges)
@@ -43,6 +50,7 @@ def node_relations(
layer: str | None = None, layer: str | None = None,
type: str | None = Query(default=None), type: str | None = Query(default=None),
direction: str = Query(default='both', pattern='^(incoming|outgoing|both)$'), direction: str = Query(default='both', pattern='^(incoming|outgoing|both)$'),
) -> ListResponse[Relation]: db: Session = Depends(get_db),
items = get_node_relations(item_id, layer=layer, rel_type=type, direction=direction) ):
items = get_node_relations(db, item_id, layer=layer, rel_type=type, direction=direction)
return ListResponse(count=len(items), items=items) return ListResponse(count=len(items), items=items)