Skip to content

Commit 344027c

Browse files
committed
refactor: snapshot
1 parent 3217546 commit 344027c

25 files changed

+566
-112
lines changed
Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
1-
from xmlrpc.client import Boolean
2-
31
from fastapi import APIRouter, File, UploadFile, HTTPException
42

5-
from apps.dashboard.crud.dashboard_service import get_dashboard_list, preview_with_id, \
6-
create_resource, create_canvas, validate_name
3+
from apps.dashboard.crud.dashboard_service import list_resource, load_resource, \
4+
create_resource, create_canvas, validate_name,delete_resource,update_resource
75
from apps.dashboard.models.dashboard_model import CreateDashboard, BaseDashboard, QueryDashboard
86
from common.core.deps import SessionDep, CurrentUser
97

108
router = APIRouter(tags=["dashboard"], prefix="/dashboard")
119

12-
@router.post("/list")
13-
async def datasource_list(session: SessionDep,dashboard: QueryDashboard):
14-
return get_dashboard_list(session=session,dashboard=dashboard)
15-
16-
@router.get("/preview_dashboard/{id}")
17-
async def preview_dashboard(session: SessionDep,id:str):
18-
return preview_with_id(session=session,dashboard_id=id)
10+
@router.post("/list_resource")
11+
async def list_resource_api(session: SessionDep,dashboard: QueryDashboard):
12+
return list_resource(session=session,dashboard=dashboard)
1913

20-
@router.post("/add", response_model=BaseDashboard)
21-
async def add(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
22-
return create_resource(session, user, dashboard)
14+
@router.post("/load_resource")
15+
async def load_resource_api(session: SessionDep,dashboard: QueryDashboard):
16+
return load_resource(session=session,dashboard=dashboard)
2317

24-
@router.post("/update", response_model=BaseDashboard)
25-
async def update(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
18+
@router.post("/create_resource", response_model=BaseDashboard)
19+
async def create_resource_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
2620
return create_resource(session, user, dashboard)
2721

28-
@router.post("/add_canvas", response_model=BaseDashboard)
29-
async def add_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
22+
@router.post("/update_resource", response_model=BaseDashboard)
23+
async def update_resource_api(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard):
24+
return update_resource(session=session, user=user, dashboard=dashboard)
25+
@router.delete("/delete_resource/{resource_id}")
26+
async def delete_resource_api(session: SessionDep,resource_id:str):
27+
return delete_resource(session,resource_id)
28+
@router.post("/create_canvas", response_model=BaseDashboard)
29+
async def create_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
3030
return create_canvas(session, user, dashboard)
3131

3232
@router.post("/update_canvas", response_model=BaseDashboard)
33-
async def update(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
33+
async def update_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
3434
return
3535

3636
@router.post("/check_name")
37-
async def check_name(session: SessionDep, dashboard: QueryDashboard):
37+
async def check_name_api(session: SessionDep, dashboard: QueryDashboard):
3838
return validate_name(session,dashboard)
3939

40+

backend/apps/dashboard/crud/dashboard_service.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,42 @@
11
from sqlalchemy import select, and_, text
2-
from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard, QueryDashboard
2+
from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard, QueryDashboard,DashboardBaseResponse
33
from common.core.deps import SessionDep, CurrentUser
44
import uuid
5-
import datetime
6-
def get_dashboard_list(session: SessionDep,dashboard: QueryDashboard):
7-
sql = text("SELECT id, name, type,node_type, pid, create_time FROM core_dashboard")
8-
for row in session.exec(sql).mappings():
9-
yield CoreDashboard(**row)
5+
import time
6+
7+
from common.utils.tree_utils import build_tree_generic
8+
9+
10+
def list_resource(session: SessionDep, dashboard: QueryDashboard):
11+
sql = "SELECT id, name, type, node_type, pid, create_time FROM core_dashboard"
12+
filters = []
13+
params = {}
14+
if dashboard.node_type is not None and dashboard.node_type != "":
15+
filters.append("node_type = :node_type")
16+
params["node_type"] = dashboard.node_type
17+
18+
if filters:
19+
sql += " WHERE " + " AND ".join(filters)
20+
21+
result = session.execute(text(sql), params)
22+
nodes = [DashboardBaseResponse(**row) for row in result.mappings()]
23+
tree = build_tree_generic(nodes, root_pid="root")
24+
return tree
25+
26+
27+
def load_resource(session: SessionDep,dashboard: QueryDashboard):
28+
return session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
1029

11-
def preview_with_id(session: SessionDep, dashboard_id: str):
12-
return session.query(CoreDashboard).filter(CoreDashboard.id == id).first()
1330

1431
def get_create_base_info(user: CurrentUser, dashboard: CreateDashboard):
1532
new_id = uuid.uuid4().hex
1633
record = CoreDashboard(**dashboard.model_dump())
1734
record.id = new_id
1835
record.create_by = user.id
36+
record.create_time = int(time.time())
1937
return record
2038

39+
2140
def create_resource(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
2241
record = get_create_base_info(user, dashboard)
2342
session.add(record)
@@ -26,13 +45,15 @@ def create_resource(session: SessionDep, user: CurrentUser, dashboard: CreateDas
2645
session.commit()
2746
return record
2847

29-
def update_resource(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
48+
49+
def update_resource(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard):
3050
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
3151
record.name = dashboard.name
3252
record.update_by = user.id
33-
record.update_time = datetime.datetime.now()
53+
record.update_time = int(time.time())
3454
session.add(record)
3555
session.commit()
56+
return record
3657

3758
def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
3859
record = get_create_base_info(user, dashboard)
@@ -41,13 +62,16 @@ def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashb
4162
record.canvas_style_data = dashboard.canvas_style_data
4263
session.add(record)
4364
session.flush()
65+
session.refresh(record)
66+
session.commit()
4467
return record
4568

69+
4670
def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
4771
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
4872

4973

50-
def validate_name( session: SessionDep, dashboard: QueryDashboard) -> bool:
74+
def validate_name(session: SessionDep, dashboard: QueryDashboard) -> bool:
5175
if not dashboard.workspace_id:
5276
raise ValueError("workspace_id is required")
5377
if not dashboard.pid:
@@ -63,7 +87,7 @@ def validate_name( session: SessionDep, dashboard: QueryDashboard) -> bool:
6387
CoreDashboard.name == dashboard.name
6488
)
6589
)
66-
elif dashboard.opt in ('updateLeaf', 'updateFolder'):
90+
elif dashboard.opt in ('updateLeaf', 'updateFolder', 'rename'):
6791
if not dashboard.id:
6892
raise ValueError("id is required for update operation")
6993
query = session.query(CoreDashboard).filter(
@@ -76,4 +100,11 @@ def validate_name( session: SessionDep, dashboard: QueryDashboard) -> bool:
76100
)
77101
else:
78102
raise ValueError(f"Invalid opt value: {dashboard.opt}")
79-
return not session.query(query.exists()).scalar()
103+
return not session.query(query.exists()).scalar()
104+
105+
106+
def delete_resource(session: SessionDep, resource_id: str):
107+
sql = text("DELETE FROM core_dashboard WHERE id = :resource_id")
108+
result = session.execute(sql, {"resource_id": resource_id})
109+
session.commit()
110+
return result.rowcount > 0

backend/apps/dashboard/models/dashboard_model.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from sqlmodel import SQLModel, Field
22
from sqlalchemy import String, Column, Text, SmallInteger, BigInteger, Integer,DateTime
3-
from typing import Optional
3+
from typing import Optional, List
44
from pydantic import BaseModel
55

66
class CoreDashboard(SQLModel, table=True):
@@ -127,9 +127,11 @@ class DashboardBaseResponse(BaseModel):
127127
name: Optional[str] = None
128128
pid: Optional[str] = None
129129
node_type: Optional[str] = None
130+
leaf: Optional[bool] = False
130131
type: Optional[str] = None
131132
create_time: Optional[int] = None
132133
update_time: Optional[int] = None
134+
children: List['DashboardBaseResponse'] = []
133135

134136
class BaseDashboard(BaseModel):
135137
id: str = ''
@@ -139,6 +141,7 @@ class BaseDashboard(BaseModel):
139141
org_id: str = ''
140142
type: str = ''
141143
node_type: str = ''
144+
level: int = 0
142145
create_by: int = 0
143146

144147
class QueryDashboard(BaseDashboard):

backend/common/utils/tree_utils.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import List, Optional, Dict, TypeVar, Protocol, Any
2+
from pydantic import BaseModel
3+
4+
5+
class ITreeNode(Protocol):
6+
id: Optional[str]
7+
pid: Optional[str]
8+
children: List['ITreeNode']
9+
10+
T = TypeVar('T', bound=ITreeNode)
11+
12+
def build_tree_generic(nodes: List[T], root_pid: Any = None) -> List[T]:
13+
node_dict: Dict[str, T] = {node.id: node for node in nodes if node.id is not None}
14+
tree: List[T] = []
15+
16+
for node in nodes:
17+
if node.pid == root_pid:
18+
tree.append(node)
19+
elif node.pid in node_dict:
20+
node_dict[node.pid].children.append(node)
21+
22+
return tree

frontend/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"@npkg/tinymce-plugins": "^0.0.7",
1414
"@tinymce/tinymce-vue": "^5.1.0",
1515
"dayjs": "^1.11.13",
16+
"element-plus": "^2.10.1",
1617
"element-plus-secondary": "^1.0.0",
1718
"lodash": "^4.17.21",
1819
"snowflake-id": "^1.1.0",

frontend/src/api/dashboard.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { request } from '@/utils/request'
22

33
export const dashboardApi = {
4-
list: (params: any) => request.post('/dashboard/list',params),
5-
getDashboardInfo: (params:any) => request.post(`/dashboard/get_dashboard/${params.id}`,params),
6-
sqNameCheck: (data: any) => request.post('/dashboard/name_check',data),
7-
moveResource: (data: any) => request.post('/dashboard/move',data),
8-
addResource: (data: any) => request.post('/dashboard/add',data),
9-
updateResource: (data: any) => request.post('/dashboard/update',data),
10-
saveCanvas: (data: any) => request.post('/dashboard/add_canvas',data),
11-
updateCanvas: (data: any) => request.post('/dashboard/update_',data),
12-
check_name: (data: any) => request.post('/dashboard/check_name',data)
4+
list_resource: (params: any) => request.post('/dashboard/list_resource',params),
5+
load_resource: (params:any) => request.post('/dashboard/load_resource',params),
6+
create_resource: (params: any) => request.post('/dashboard/create_resource',params),
7+
update_resource: (params: any) => request.post('/dashboard/update_resource',params),
8+
create_canvas: (params: any) => request.post('/dashboard/create_canvas',params),
9+
update_canvas: (params: any) => request.post('/dashboard/update_canvas',params),
10+
check_name: (params: any) => request.post('/dashboard/check_name',params),
11+
delete_resource: (params: any) => request.delete(`/dashboard/delete_resource/${params.id}`,params),
12+
move_resource: (params: any) => request.delete(`/dashboard/move_resource/${params.id}`,params),
1313
}

frontend/src/assets/svg/folder.svg

Lines changed: 1 addition & 1 deletion
Loading
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 1 addition & 1 deletion
Loading
Lines changed: 1 addition & 1 deletion
Loading

0 commit comments

Comments
 (0)