11from 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
33from common .core .deps import SessionDep , CurrentUser
44import 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
1431def 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+
2140def 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
3758def 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+
4670def 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
0 commit comments