|
@@ -1,6 +1,6 @@
|
|
from fastapi import APIRouter, Depends, HTTPException, Request, Security
|
|
from fastapi import APIRouter, Depends, HTTPException, Request, Security
|
|
from fastapi.security import APIKeyHeader
|
|
from fastapi.security import APIKeyHeader
|
|
-from typing import Optional
|
|
|
|
|
|
+from typing import Optional, List
|
|
from pydantic import BaseModel
|
|
from pydantic import BaseModel
|
|
from ..model.response import StandardResponse
|
|
from ..model.response import StandardResponse
|
|
from ..db.session import get_db
|
|
from ..db.session import get_db
|
|
@@ -73,7 +73,7 @@ class GetNodeRelationshipsRequest(BaseModel):
|
|
@router.post("/nodes/{src_id}/relationships", response_model=StandardResponse)
|
|
@router.post("/nodes/{src_id}/relationships", response_model=StandardResponse)
|
|
async def get_node_relationships_condition(
|
|
async def get_node_relationships_condition(
|
|
src_id: int,
|
|
src_id: int,
|
|
- payload: GetNodeRelationshipsRequest,
|
|
|
|
|
|
+ payload: Optional[GetNodeRelationshipsRequest] = None,
|
|
db: Session = Depends(get_db),
|
|
db: Session = Depends(get_db),
|
|
request_id: str = Depends(get_request_id),
|
|
request_id: str = Depends(get_request_id),
|
|
api_key: str = Security(api_key_header)
|
|
api_key: str = Security(api_key_header)
|
|
@@ -90,23 +90,14 @@ async def get_node_relationships_condition(
|
|
#if count >= 2:
|
|
#if count >= 2:
|
|
#break
|
|
#break
|
|
dest_node = edge['dest_node']
|
|
dest_node = edge['dest_node']
|
|
- dest_props = []
|
|
|
|
- edge_props = []
|
|
|
|
- #count += 1
|
|
|
|
- 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({
|
|
relationships.append({
|
|
"name": edge['name'],
|
|
"name": edge['name'],
|
|
- "props": edge_props,
|
|
|
|
|
|
+ "id": edge['id'],
|
|
"destNode": {
|
|
"destNode": {
|
|
"category": dest_node['category'],
|
|
"category": dest_node['category'],
|
|
"id": str(dest_node['id']),
|
|
"id": str(dest_node['id']),
|
|
- "name": dest_node['name'],
|
|
|
|
- "props": dest_props
|
|
|
|
|
|
+ "name": dest_node['name']
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
@@ -142,20 +133,19 @@ async def get_node_relationships(
|
|
dest_props = []
|
|
dest_props = []
|
|
edge_props = []
|
|
edge_props = []
|
|
# count += 1
|
|
# count += 1
|
|
- 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'])]
|
|
|
|
|
|
+ # 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({
|
|
relationships.append({
|
|
"name": edge['name'],
|
|
"name": edge['name'],
|
|
- "props": edge_props,
|
|
|
|
|
|
+ "id": edge['id'],
|
|
"destNode": {
|
|
"destNode": {
|
|
"category": dest_node['category'],
|
|
"category": dest_node['category'],
|
|
"id": str(dest_node['id']),
|
|
"id": str(dest_node['id']),
|
|
"name": dest_node['name'],
|
|
"name": dest_node['name'],
|
|
- "props": dest_props
|
|
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
|
|
@@ -169,11 +159,11 @@ async def get_node_relationships(
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
class GetNodeProperties(BaseModel):
|
|
class GetNodeProperties(BaseModel):
|
|
- property_name: Optional[str] = None
|
|
|
|
|
|
+ prop_name: Optional[str] = None
|
|
@router.post("/nodes/{node_id}/properties", response_model=StandardResponse)
|
|
@router.post("/nodes/{node_id}/properties", response_model=StandardResponse)
|
|
-async def get_node_properts(
|
|
|
|
|
|
+async def get_node_properties(
|
|
node_id: int,
|
|
node_id: int,
|
|
- payload: GetNodeProperties,
|
|
|
|
|
|
+ payload: Optional[GetNodeProperties] = None,
|
|
db: Session = Depends(get_db),
|
|
db: Session = Depends(get_db),
|
|
request_id: str = Depends(get_request_id),
|
|
request_id: str = Depends(get_request_id),
|
|
api_key: str = Security(api_key_header)
|
|
api_key: str = Security(api_key_header)
|
|
@@ -181,52 +171,37 @@ async def get_node_properts(
|
|
try:
|
|
try:
|
|
|
|
|
|
prop_service = KGPropService(db)
|
|
prop_service = KGPropService(db)
|
|
-
|
|
|
|
- edges = edge_service.get_edges_by_nodes(src_id=src_id, dest_id=None)
|
|
|
|
- relationships = []
|
|
|
|
-
|
|
|
|
- # count = 0
|
|
|
|
- for edge in edges:
|
|
|
|
- # if count >= 2:
|
|
|
|
- # break
|
|
|
|
- dest_node = edge['dest_node']
|
|
|
|
- dest_props = []
|
|
|
|
- edge_props = []
|
|
|
|
- # count += 1
|
|
|
|
- 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'],
|
|
|
|
- "props": edge_props,
|
|
|
|
- "destNode": {
|
|
|
|
- "category": dest_node['category'],
|
|
|
|
- "id": str(dest_node['id']),
|
|
|
|
- "name": dest_node['name'],
|
|
|
|
- "props": dest_props
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
|
|
+ props = prop_service.get_props_by_ref_id(node_id,prop_name=payload.prop_name if payload and payload.prop_name else None)
|
|
return StandardResponse(
|
|
return StandardResponse(
|
|
success=True,
|
|
success=True,
|
|
requestId=request_id,
|
|
requestId=request_id,
|
|
- data=ObjectToJsonArrayConverter.convert({"relationships": relationships})
|
|
|
|
|
|
+ data=ObjectToJsonArrayConverter.convert({"props": props})
|
|
)
|
|
)
|
|
except Exception as e:
|
|
except Exception as e:
|
|
- logger.error(f"获取节点关系失败: {str(e)}")
|
|
|
|
|
|
+ logger.exception(f"获取节点属性失败: {str(e)}")
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
|
|
|
|
class GetEdgeProperties(BaseModel):
|
|
class GetEdgeProperties(BaseModel):
|
|
- property_name: Optional[str] = None
|
|
|
|
|
|
+ prop_name: Optional[str] = None
|
|
@router.post("/edges/{edge_id}/properties", response_model=StandardResponse)
|
|
@router.post("/edges/{edge_id}/properties", response_model=StandardResponse)
|
|
-async def get_node_relationships_condition(
|
|
|
|
|
|
+async def get_edges_properties(
|
|
edge_id: int,
|
|
edge_id: int,
|
|
- payload: GetEdgeProperties,
|
|
|
|
|
|
+ payload: Optional[GetEdgeProperties] = None,
|
|
db: Session = Depends(get_db),
|
|
db: Session = Depends(get_db),
|
|
request_id: str = Depends(get_request_id),
|
|
request_id: str = Depends(get_request_id),
|
|
api_key: str = Security(api_key_header)
|
|
api_key: str = Security(api_key_header)
|
|
):
|
|
):
|
|
|
|
+ try:
|
|
|
|
+
|
|
|
|
+ prop_service = KGPropService(db)
|
|
|
|
+ props = prop_service.get_props_by_ref_id(edge_id,prop_name=payload.prop_name if payload and payload.prop_name else None)
|
|
|
|
+
|
|
|
|
+ return StandardResponse(
|
|
|
|
+ success=True,
|
|
|
|
+ requestId=request_id,
|
|
|
|
+ data=ObjectToJsonArrayConverter.convert({"props": props})
|
|
|
|
+ )
|
|
|
|
+ except Exception as e:
|
|
|
|
+ logger.exception(f"获取关系属性失败: {str(e)}")
|
|
|
|
+ raise HTTPException(500, detail=StandardResponse.error(str(e)))
|
|
knowledge_nodes_api_router = router
|
|
knowledge_nodes_api_router = router
|