|
@@ -7,6 +7,8 @@ from sqlalchemy.orm import Session
|
|
|
|
|
|
from service.kg_node_service import KGNodeService
|
|
|
from service.trunks_service import TrunksService
|
|
|
+from service.kg_edge_service import KGEdgeService
|
|
|
+from service.kg_prop_service import KGPropService
|
|
|
import logging
|
|
|
|
|
|
router = APIRouter(prefix="/saas", tags=["SaaS Knowledge Base"])
|
|
@@ -43,6 +45,9 @@ class VectorSearchRequest(BaseModel):
|
|
|
limit: int = 10
|
|
|
type: Optional[str] = None
|
|
|
|
|
|
+class NodeRelationshipRequest(BaseModel):
|
|
|
+ src_id: int
|
|
|
+
|
|
|
@router.post("/nodes/paginated_search2", response_model=StandardResponse)
|
|
|
async def paginated_search(
|
|
|
payload: PaginatedSearchRequest,
|
|
@@ -192,4 +197,43 @@ async def get_trunk(
|
|
|
logger.error(f"获取trunk详情失败: {str(e)}")
|
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
+@router.get("/nodes/{src_id}/relationships", response_model=StandardResponse)
|
|
|
+async def get_node_relationships(
|
|
|
+ src_id: int,
|
|
|
+ db: Session = Depends(get_db)
|
|
|
+):
|
|
|
+ try:
|
|
|
+ edge_service = KGEdgeService(db)
|
|
|
+ prop_service = KGPropService(db)
|
|
|
+
|
|
|
+ edges = edge_service.get_edges_by_nodes(src_id=src_id, dest_id=None)
|
|
|
+ relationships = []
|
|
|
+
|
|
|
+ for edge in edges:
|
|
|
+ dest_node = edge['dest_node']
|
|
|
+ dest_props = [{'prop_title': p['prop_title'], 'prop_value': p['prop_value']}
|
|
|
+ for p in prop_service.get_props_by_ref_id(dest_node['id'])]
|
|
|
+
|
|
|
+ edge_props = [{'prop_title': p['prop_title'], 'prop_value': p['prop_value']}
|
|
|
+ for p in prop_service.get_props_by_ref_id(edge['id'])]
|
|
|
+
|
|
|
+ relationships.append({
|
|
|
+ "name": edge['name'],
|
|
|
+ "properties": edge_props,
|
|
|
+ "targetNode": {
|
|
|
+ "category": dest_node['category'],
|
|
|
+ "id": str(dest_node['id']),
|
|
|
+ "name": dest_node['name'],
|
|
|
+ "properties": dest_props
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ return StandardResponse(
|
|
|
+ success=True,
|
|
|
+ data={"relationships": relationships}
|
|
|
+ )
|
|
|
+ except Exception as e:
|
|
|
+ logger.error(f"获取节点关系失败: {str(e)}")
|
|
|
+ raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
+
|
|
|
saas_kb_router = router
|