diff --git a/backend/apps/datasource/api/datasource.py b/backend/apps/datasource/api/datasource.py index a7fb26b7..bc7115db 100644 --- a/backend/apps/datasource/api/datasource.py +++ b/backend/apps/datasource/api/datasource.py @@ -203,8 +203,9 @@ async def table_list(session: SessionDep, id: int = Path(..., description=f"{PLA @router.post("/fieldList/{ds_id}/{id}", response_model=List[CoreField], summary=f"{PLACEHOLDER_PREFIX}ds_field_list") @require_permissions(permission=SqlbotPermission(role=['ws_admin'], type='ds', keyExpression="ds_id")) async def field_list(session: SessionDep, field: FieldObj, + ds_id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id"), id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_table_id")): - return get_fields_by_table_id(session, id, field) + return get_fields_by_table_id(session, ds_id, id, field) # @router.post("/editLocalComment", include_in_schema=False) diff --git a/backend/apps/datasource/crud/field.py b/backend/apps/datasource/crud/field.py index 371b86e7..ad6ee750 100644 --- a/backend/apps/datasource/crud/field.py +++ b/backend/apps/datasource/crud/field.py @@ -1,6 +1,7 @@ from common.core.deps import SessionDep -from ..models.datasource import CoreField, FieldObj +from ..models.datasource import CoreField, FieldObj, CoreTable from sqlalchemy import or_, and_ +from fastapi import HTTPException def delete_field_by_ds_id(session: SessionDep, id: int): @@ -8,7 +9,11 @@ def delete_field_by_ds_id(session: SessionDep, id: int): session.commit() -def get_fields_by_table_id(session: SessionDep, id: int, field: FieldObj): +def get_fields_by_table_id(session: SessionDep, ds_id: int, id: int, field: FieldObj): + table = session.query(CoreTable).filter(and_(CoreTable.id == id, CoreTable.ds_id == ds_id)).first() + if not table: + raise HTTPException(status_code=500, detail='The data source ID does not match the table ID') + if field and field.fieldName: return session.query(CoreField).filter( and_(CoreField.table_id == id, or_(CoreField.field_name.like(f'%{field.fieldName}%'),