Skip to content

Commit 04aee97

Browse files
committed
feat: datasource api and UI
1 parent fdc6874 commit 04aee97

File tree

8 files changed

+202
-89
lines changed

8 files changed

+202
-89
lines changed

backend/apps/datasource/api/datasource.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
from fastapi import APIRouter
2-
from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields, execSql
2+
from ..crud.datasource import get_datasource_list, check_status, create_ds, update_ds, delete_ds, getTables, getFields, \
3+
execSql, update_table_and_fields, getTablesByDs
34
from common.core.deps import SessionDep
4-
from ..models.datasource import CoreDatasource, CreateDatasource
5+
from ..models.datasource import CoreDatasource, CreateDatasource, EditObj
6+
from ..crud.table import get_tables_by_ds_id
7+
from ..crud.field import get_fields_by_table_id
58

69
router = APIRouter(tags=["datasource"], prefix="/datasource")
710

@@ -36,6 +39,11 @@ async def get_tables(session: SessionDep, id: int):
3639
return getTables(session, id)
3740

3841

42+
@router.post("/getTablesByConf")
43+
async def get_tables_by_conf(session: SessionDep, ds: CoreDatasource):
44+
return getTablesByDs(session, ds)
45+
46+
3947
@router.post("/getFields/{id}/{table_name}")
4048
async def get_tables(session: SessionDep, id: int, table_name: str):
4149
return getFields(session, id, table_name)
@@ -44,3 +52,18 @@ async def get_tables(session: SessionDep, id: int, table_name: str):
4452
@router.post("/execSql/{id}/{sql}")
4553
async def exec_sql(session: SessionDep, id: int, sql: str):
4654
return execSql(session, id, sql)
55+
56+
57+
@router.get("/tableList/{id}")
58+
async def table_list(session: SessionDep, id: int):
59+
return get_tables_by_ds_id(session, id)
60+
61+
62+
@router.get("/fieldList/{id}")
63+
async def field_list(session: SessionDep, id: int):
64+
return get_fields_by_table_id(session, id)
65+
66+
67+
@router.post("/editLocalComment")
68+
async def edit_local(session: SessionDep, data: EditObj):
69+
update_table_and_fields(session, data)

backend/apps/datasource/crud/datasource.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
from sqlmodel import select
2-
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema
2+
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema, EditObj
33
import datetime
44
from common.core.deps import SessionDep
55
from apps.db.db import get_session, get_tables, get_fields, exec_sql
66
from sqlalchemy import text, and_
77
from common.utils.utils import deepcopy_ignore_extra
88
from typing import List
9-
from ..crud.table import delete_table_by_ds_id
10-
from ..crud.field import delete_field_by_ds_id
9+
from ..crud.table import delete_table_by_ds_id, update_table
10+
from ..crud.field import delete_field_by_ds_id, update_field
1111

1212

1313
def get_datasource_list(session: SessionDep) -> CoreDatasource:
@@ -80,6 +80,11 @@ def getTables(session: SessionDep, id: int):
8080
return tables
8181

8282

83+
def getTablesByDs(session: SessionDep, ds: CoreDatasource):
84+
tables = get_tables(ds)
85+
return tables
86+
87+
8388
def getFields(session: SessionDep, id: int, table_name: str):
8489
ds = session.exec(select(CoreDatasource).where(CoreDatasource.id == id)).first()
8590
fields = get_fields(ds, table_name)
@@ -151,3 +156,9 @@ def sync_fields(session: SessionDep, ds: CoreDatasource, table: CoreTable, field
151156
if len(id_list) > 0:
152157
session.query(CoreField).filter(and_(CoreField.table_id == table.id, CoreField.id.not_in(id_list))).delete(
153158
synchronize_session=False)
159+
160+
161+
def update_table_and_fields(session: SessionDep, data: EditObj):
162+
update_table(session, data.table)
163+
for field in data.fields:
164+
update_field(session, field)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
from common.core.deps import SessionDep
22
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema
3+
from sqlalchemy import and_
34

45

56
def delete_field_by_ds_id(session: SessionDep, id: int):
67
session.query(CoreField).filter(CoreField.ds_id == id).delete(synchronize_session=False)
78
session.commit()
9+
10+
11+
def get_fields_by_table_id(session: SessionDep, id: int):
12+
return session.query(CoreField).filter(CoreField.table_id == id).order_by(
13+
CoreField.field_name.asc()).all()
14+
15+
16+
def update_field(session: SessionDep, item: CoreField):
17+
session.add(item)
18+
session.commit()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
from common.core.deps import SessionDep
22
from ..models.datasource import CoreDatasource, CreateDatasource, CoreTable, CoreField, ColumnSchema
3+
from sqlalchemy import and_
34

45

56
def delete_table_by_ds_id(session: SessionDep, id: int):
67
session.query(CoreTable).filter(CoreTable.ds_id == id).delete(synchronize_session=False)
78
session.commit()
9+
10+
11+
def get_tables_by_ds_id(session: SessionDep, id: int):
12+
return session.query(CoreTable).filter(CoreTable.ds_id == id).order_by(
13+
CoreTable.table_name.asc()).all()
14+
15+
16+
def update_table(session: SessionDep, item: CoreTable):
17+
session.add(item)
18+
session.commit()

backend/apps/datasource/models/datasource.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class CoreDatasource(SQLModel, table=True):
2020
class CoreTable(SQLModel, table=True):
2121
__tablename__ = "core_table"
2222
id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True))
23-
ds_id:int = Field(sa_column=Column(BigInteger()))
23+
ds_id: int = Field(sa_column=Column(BigInteger()))
2424
checked: bool = Field(default=True)
2525
table_name: str = Field(sa_column=Column(Text))
2626
table_comment: str = Field(sa_column=Column(Text))
@@ -52,6 +52,13 @@ class CreateDatasource(BaseModel):
5252
tables: List[CoreTable] = []
5353

5454

55+
# edit local saved table and fields
56+
class EditObj(BaseModel):
57+
table: CoreTable = None
58+
fields: List[CoreField] = []
59+
60+
61+
# datasource config info
5562
class DatasourceConf(BaseModel):
5663
host: str = ''
5764
port: int = 0

frontend/src/api/datasource.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export const datasourceApi = {
77
update: (data: any) => request.post('/datasource/update', data),
88
delete: (id: Number) => request.post(`/datasource/delete/${id}`),
99
getTables: (id: Number) => request.post(`/datasource/getTables/${id}`),
10+
getTablesByConf: (data: any) => request.post('/datasource/getTablesByConf', data),
1011
getFields: (id: Number, table_name: string) => request.post(`/datasource/getFields/${id}/${table_name}`),
1112
execSql: (id: Number, sql: string) => request.post(`/datasource/execSql/${id}/${sql}`),
1213
}

frontend/src/style.less

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,9 @@ body {
5050
min-height: 100vh;
5151
}
5252

53-
h1 {
54-
font-size: 3.2em;
55-
line-height: 1.1;
56-
}
57-
58-
.card {
59-
padding: 2em;
60-
}
61-
6253
#app {
6354
width: 100%;
6455
margin: 0;
65-
text-align: center;
6656
}
6757

6858
@media (prefers-color-scheme: light) {

0 commit comments

Comments
 (0)