38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
from fastapi import APIRouter, HTTPException, Query
|
|
|
|
from app.schemas import EntityResponse, ListResponse, Relation
|
|
from app.services.inventory import get_node_relations
|
|
from app.services.store import RELATIONS
|
|
|
|
router = APIRouter(prefix='/relations', tags=['relations'])
|
|
|
|
|
|
@router.get('', response_model=ListResponse[Relation])
|
|
def list_relations(
|
|
source_id: str | None = None,
|
|
target_id: str | None = None,
|
|
layer: str | None = None,
|
|
type: str | None = Query(default=None),
|
|
min_confidence: float | None = None,
|
|
) -> ListResponse[Relation]:
|
|
items = RELATIONS
|
|
if source_id:
|
|
items = [r for r in items if r.source_id == source_id]
|
|
if target_id:
|
|
items = [r for r in items if r.target_id == target_id]
|
|
if layer:
|
|
items = [r for r in items if r.layer == layer]
|
|
if type:
|
|
items = [r for r in items if r.type == type]
|
|
if min_confidence is not None:
|
|
items = [r for r in items if r.confidence >= min_confidence]
|
|
return ListResponse(count=len(items), items=items)
|
|
|
|
|
|
@router.get('/{relation_id}', response_model=EntityResponse[Relation])
|
|
def get_relation(relation_id: str) -> EntityResponse[Relation]:
|
|
for item in RELATIONS:
|
|
if item.id == relation_id:
|
|
return EntityResponse(item=item)
|
|
raise HTTPException(status_code=404, detail='Relation not found')
|