Skip to content

Commit 8c8dbcd

Browse files
committed
feat: Add Api Docs
1 parent 4d49819 commit 8c8dbcd

File tree

4 files changed

+96
-35
lines changed

4 files changed

+96
-35
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
check_status_by_id, sync_single_fields
2222
from ..crud.field import get_fields_by_table_id
2323
from ..crud.table import get_tables_by_ds_id
24-
from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable, CoreField, FieldObj
24+
from ..models.datasource import CoreDatasource, CreateDatasource, TableObj, CoreTable, CoreField, FieldObj, \
25+
TableSchemaResponse, ColumnSchemaResponse, PreviewResponse
2526

2627
router = APIRouter(tags=["Datasource"], prefix="/datasource")
2728
path = settings.EXCEL_PATH
@@ -45,57 +46,59 @@ async def get_datasource(session: SessionDep, id: int = Path(..., description=f"
4546
return get_ds(session, id)
4647

4748

48-
@router.post("/check")
49+
@router.post("/check", response_model=bool, summary=f"{PLACEHOLDER_PREFIX}ds_check")
4950
async def check(session: SessionDep, trans: Trans, ds: CoreDatasource):
5051
def inner():
5152
return check_status(session, trans, ds, True)
5253

5354
return await asyncio.to_thread(inner)
5455

5556

56-
@router.get("/check/{ds_id}")
57-
async def check_by_id(session: SessionDep, trans: Trans, ds_id: int):
57+
@router.get("/check/{ds_id}", response_model=bool, summary=f"{PLACEHOLDER_PREFIX}ds_check")
58+
async def check_by_id(session: SessionDep, trans: Trans,
59+
ds_id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id")):
5860
def inner():
5961
return check_status_by_id(session, trans, ds_id, True)
6062

6163
return await asyncio.to_thread(inner)
6264

6365

64-
@router.post("/add", response_model=CoreDatasource)
66+
@router.post("/add", response_model=CoreDatasource, summary=f"{PLACEHOLDER_PREFIX}ds_add")
6567
async def add(session: SessionDep, trans: Trans, user: CurrentUser, ds: CreateDatasource):
6668
def inner():
6769
return create_ds(session, trans, user, ds)
6870

6971
return await asyncio.to_thread(inner)
7072

7173

72-
@router.post("/chooseTables/{id}")
73-
async def choose_tables(session: SessionDep, trans: Trans, id: int, tables: List[CoreTable]):
74+
@router.post("/chooseTables/{id}", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_choose_tables")
75+
async def choose_tables(session: SessionDep, trans: Trans, tables: List[CoreTable],
76+
id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id")):
7477
def inner():
7578
chooseTables(session, trans, id, tables)
7679

7780
await asyncio.to_thread(inner)
7881

7982

80-
@router.post("/update", response_model=CoreDatasource)
83+
@router.post("/update", response_model=CoreDatasource, summary=f"{PLACEHOLDER_PREFIX}ds_update")
8184
async def update(session: SessionDep, trans: Trans, user: CurrentUser, ds: CoreDatasource):
8285
def inner():
8386
return update_ds(session, trans, user, ds)
8487

8588
return await asyncio.to_thread(inner)
8689

8790

88-
@router.post("/delete/{id}", response_model=CoreDatasource)
89-
async def delete(session: SessionDep, id: int):
91+
@router.post("/delete/{id}", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_delete")
92+
async def delete(session: SessionDep, id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id")):
9093
return delete_ds(session, id)
9194

9295

93-
@router.post("/getTables/{id}")
94-
async def get_tables(session: SessionDep, id: int):
96+
@router.post("/getTables/{id}", response_model=List[TableSchemaResponse], summary=f"{PLACEHOLDER_PREFIX}ds_get_tables")
97+
async def get_tables(session: SessionDep, id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id")):
9598
return getTables(session, id)
9699

97100

98-
@router.post("/getTablesByConf")
101+
@router.post("/getTablesByConf", response_model=List[TableSchemaResponse], summary=f"{PLACEHOLDER_PREFIX}ds_get_tables")
99102
async def get_tables_by_conf(session: SessionDep, trans: Trans, ds: CoreDatasource):
100103
try:
101104
def inner():
@@ -113,7 +116,7 @@ def inner():
113116
raise HTTPException(status_code=500, detail=f'Get table Failed: {e.args}')
114117

115118

116-
@router.post("/getSchemaByConf")
119+
@router.post("/getSchemaByConf", response_model=List[str], summary=f"{PLACEHOLDER_PREFIX}ds_get_schema")
117120
async def get_schema_by_conf(session: SessionDep, trans: Trans, ds: CoreDatasource):
118121
try:
119122
def inner():
@@ -131,13 +134,16 @@ def inner():
131134
raise HTTPException(status_code=500, detail=f'Get table Failed: {e.args}')
132135

133136

134-
@router.post("/getFields/{id}/{table_name}")
135-
async def get_fields(session: SessionDep, id: int, table_name: str):
137+
@router.post("/getFields/{id}/{table_name}", response_model=List[ColumnSchemaResponse],
138+
summary=f"{PLACEHOLDER_PREFIX}ds_get_fields")
139+
async def get_fields(session: SessionDep,
140+
id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id"),
141+
table_name: str = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_table_name")):
136142
return getFields(session, id, table_name)
137143

138144

139-
@router.post("/syncFields/{id}")
140-
async def sync_fields(session: SessionDep, id: int):
145+
@router.post("/syncFields/{id}", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_sync_fields")
146+
async def sync_fields(session: SessionDep, id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_table_id")):
141147
return sync_single_fields(session, id)
142148

143149

@@ -149,7 +155,7 @@ class TestObj(BaseModel):
149155

150156

151157
# not used, just do test
152-
@router.post("/execSql/{id}")
158+
@router.post("/execSql/{id}", include_in_schema=False)
153159
async def exec_sql(session: SessionDep, id: int, obj: TestObj):
154160
def inner():
155161
data = execSql(session, id, obj.sql)
@@ -165,33 +171,35 @@ def inner():
165171
return await asyncio.to_thread(inner)
166172

167173

168-
@router.post("/tableList/{id}")
169-
async def table_list(session: SessionDep, id: int):
174+
@router.post("/tableList/{id}", response_model=List[CoreTable], summary=f"{PLACEHOLDER_PREFIX}ds_table_list")
175+
async def table_list(session: SessionDep, id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id")):
170176
return get_tables_by_ds_id(session, id)
171177

172178

173-
@router.post("/fieldList/{id}")
174-
async def field_list(session: SessionDep, id: int, field: FieldObj):
179+
@router.post("/fieldList/{id}", response_model=List[CoreField], summary=f"{PLACEHOLDER_PREFIX}ds_field_list")
180+
async def field_list(session: SessionDep, field: FieldObj,
181+
id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_table_id")):
175182
return get_fields_by_table_id(session, id, field)
176183

177184

178-
@router.post("/editLocalComment")
185+
@router.post("/editLocalComment", include_in_schema=False)
179186
async def edit_local(session: SessionDep, data: TableObj):
180187
update_table_and_fields(session, data)
181188

182189

183-
@router.post("/editTable")
190+
@router.post("/editTable", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_edit_table")
184191
async def edit_table(session: SessionDep, table: CoreTable):
185192
updateTable(session, table)
186193

187194

188-
@router.post("/editField")
195+
@router.post("/editField", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_edit_field")
189196
async def edit_field(session: SessionDep, field: CoreField):
190197
updateField(session, field)
191198

192199

193-
@router.post("/previewData/{id}")
194-
async def preview_data(session: SessionDep, trans: Trans, current_user: CurrentUser, id: int, data: TableObj):
200+
@router.post("/previewData/{id}", response_model=PreviewResponse, summary=f"{PLACEHOLDER_PREFIX}ds_preview_data")
201+
async def preview_data(session: SessionDep, trans: Trans, current_user: CurrentUser, data: TableObj,
202+
id: int = Path(..., description=f"{PLACEHOLDER_PREFIX}ds_id")):
195203
def inner():
196204
try:
197205
return preview(session, current_user, id, data)
@@ -207,7 +215,7 @@ def inner():
207215

208216

209217
# not used
210-
@router.post("/fieldEnum/{id}")
218+
@router.post("/fieldEnum/{id}", include_in_schema=False)
211219
async def field_enum(session: SessionDep, id: int):
212220
def inner():
213221
return fieldEnum(session, id)
@@ -279,8 +287,8 @@ def inner():
279287
# return await asyncio.to_thread(inner)
280288

281289

282-
@router.post("/uploadExcel")
283-
async def upload_excel(session: SessionDep, file: UploadFile = File(...)):
290+
@router.post("/uploadExcel", response_model=None, summary=f"{PLACEHOLDER_PREFIX}ds_upload_excel")
291+
async def upload_excel(session: SessionDep, file: UploadFile = File(..., description=f"{PLACEHOLDER_PREFIX}ds_excel")):
284292
ALLOWED_EXTENSIONS = {"xlsx", "xls", "csv"}
285293
if not file.filename.lower().endswith(tuple(ALLOWED_EXTENSIONS)):
286294
raise HTTPException(400, "Only support .xlsx/.xls/.csv")

backend/apps/datasource/models/datasource.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,18 @@ class CreateDatasource(BaseModel):
7575
tables: List[CoreTable] = []
7676
recommended_config: int = 1
7777

78+
7879
class RecommendedProblemResponse:
79-
def __init__(self, datasource_id,recommended_config,questions):
80+
def __init__(self, datasource_id, recommended_config, questions):
8081
self.datasource_id = datasource_id
8182
self.recommended_config = recommended_config
8283
self.questions = questions
84+
8385
datasource_id: int = None
8486
recommended_config: int = None
8587
questions: str = None
8688

8789

88-
8990
class RecommendedProblemBase(BaseModel):
9091
datasource_id: int = None
9192
recommended_config: int = None
@@ -146,6 +147,11 @@ def __init__(self, attr1, attr2):
146147
tableComment: str
147148

148149

150+
class TableSchemaResponse(BaseModel):
151+
tableName: str = None
152+
tableComment: str = None
153+
154+
149155
class ColumnSchema:
150156
def __init__(self, attr1, attr2, attr3):
151157
self.fieldName = attr1
@@ -157,6 +163,12 @@ def __init__(self, attr1, attr2, attr3):
157163
fieldComment: str
158164

159165

166+
class ColumnSchemaResponse(BaseModel):
167+
fieldName: str
168+
fieldType: str
169+
fieldComment: str
170+
171+
160172
class TableAndFields:
161173
def __init__(self, schema, table, fields):
162174
self.schema = schema
@@ -170,3 +182,8 @@ def __init__(self, schema, table, fields):
170182

171183
class FieldObj(BaseModel):
172184
fieldName: str | None
185+
186+
class PreviewResponse(BaseModel):
187+
fields:List = []
188+
data:List = []
189+
sql:str = ''

backend/apps/swagger/locales/en.json

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,23 @@
33
"ds_list": "Datasource list",
44
"ds_list_description": "Retrieve all data sources under the current workspace",
55
"ds_get": "Get Datasource",
6-
"ds_id": "Datasource ID"
6+
"ds_id": "Datasource ID",
7+
"ds_check": "Datasource status check",
8+
"ds_add": "Create Datasource",
9+
"ds_choose_tables": "Select Tables",
10+
"ds_update": "Edit Datasource",
11+
"ds_delete": "Delete Datasource",
12+
"ds_get_tables": "Query Table info from database",
13+
"ds_get_schema": "Query Schema from database",
14+
"ds_get_fields": "Query Fields from database",
15+
"ds_sync_fields": "Sync Fields",
16+
"ds_table_id": "Table ID",
17+
"ds_table_name": "Table Name",
18+
"ds_table_list": "Get Table List",
19+
"ds_field_list": "Get Field List",
20+
"ds_edit_table": "Edit Table Info",
21+
"ds_edit_field": "Edit Field Info",
22+
"ds_preview_data": "Preview Data",
23+
"ds_upload_excel": "Upload Excel",
24+
"ds_excel": "File"
725
}

backend/apps/swagger/locales/zh.json

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,23 @@
33
"ds_list": "数据源列表",
44
"ds_list_description": "获取当前工作空间下所有数据源",
55
"ds_get": "获取数据源",
6-
"ds_id": "数据源 ID"
6+
"ds_id": "数据源 ID",
7+
"ds_check": "数据源状态校验",
8+
"ds_add": "创建数据源",
9+
"ds_choose_tables": "选择数据表",
10+
"ds_update": "编辑数据源",
11+
"ds_delete": "删除数据源",
12+
"ds_get_tables": "获取数据库的表信息",
13+
"ds_get_schema": "获取数据库Schema",
14+
"ds_get_fields": "获取数据库表字段",
15+
"ds_sync_fields": "同步表字段",
16+
"ds_table_id": "表 ID",
17+
"ds_table_name": "表名",
18+
"ds_table_list": "获取表列表",
19+
"ds_field_list": "获取字段列表",
20+
"ds_edit_table": "编辑表信息",
21+
"ds_edit_field": "编辑字段信息",
22+
"ds_preview_data": "预览数据",
23+
"ds_upload_excel": "上传Excel",
24+
"ds_excel": "文件"
725
}

0 commit comments

Comments
 (0)