Add File
This commit is contained in:
137
backend/apps/dashboard/crud/dashboard_service.py
Normal file
137
backend/apps/dashboard/crud/dashboard_service.py
Normal file
@@ -0,0 +1,137 @@
|
||||
from sqlalchemy import select, and_, text
|
||||
from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard, QueryDashboard, DashboardBaseResponse
|
||||
from common.core.deps import SessionDep, CurrentUser
|
||||
import uuid
|
||||
import time
|
||||
|
||||
from common.utils.tree_utils import build_tree_generic
|
||||
|
||||
|
||||
def list_resource(session: SessionDep, dashboard: QueryDashboard, current_user: CurrentUser):
|
||||
sql = "SELECT id, name, type, node_type, pid, create_time FROM core_dashboard"
|
||||
filters = []
|
||||
params = {}
|
||||
oid = str(current_user.oid if current_user.oid is not None else 1)
|
||||
filters.append("workspace_id = :workspace_id")
|
||||
filters.append("create_by = :create_by")
|
||||
params["workspace_id"] = oid
|
||||
params["create_by"] = str(current_user.id)
|
||||
if dashboard.node_type is not None and dashboard.node_type != "":
|
||||
filters.append("node_type = :node_type")
|
||||
params["node_type"] = dashboard.node_type
|
||||
|
||||
if filters:
|
||||
sql += " WHERE " + " AND ".join(filters)
|
||||
sql += " ORDER BY create_time DESC"
|
||||
result = session.execute(text(sql), params)
|
||||
nodes = [DashboardBaseResponse(**row) for row in result.mappings()]
|
||||
tree = build_tree_generic(nodes, root_pid="root")
|
||||
return tree
|
||||
|
||||
|
||||
def load_resource(session: SessionDep, dashboard: QueryDashboard):
|
||||
sql = text("""
|
||||
SELECT cd.*,
|
||||
creator.name AS create_name,
|
||||
updator.name AS update_name
|
||||
FROM core_dashboard cd
|
||||
LEFT JOIN sys_user creator ON cd.create_by = creator.id::varchar
|
||||
LEFT JOIN sys_user updator
|
||||
ON cd.update_by = updator.id:: varchar
|
||||
WHERE cd.id = :dashboard_id
|
||||
""")
|
||||
result = session.execute(sql, {"dashboard_id": dashboard.id}).mappings().first()
|
||||
return result
|
||||
|
||||
|
||||
def get_create_base_info(user: CurrentUser, dashboard: CreateDashboard):
|
||||
new_id = uuid.uuid4().hex
|
||||
record = CoreDashboard(**dashboard.model_dump())
|
||||
record.workspace_id = user.oid
|
||||
record.id = new_id
|
||||
record.create_by = user.id
|
||||
record.create_time = int(time.time())
|
||||
return record
|
||||
|
||||
|
||||
def create_resource(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
|
||||
record = get_create_base_info(user, dashboard)
|
||||
session.add(record)
|
||||
session.flush()
|
||||
session.refresh(record)
|
||||
session.commit()
|
||||
return record
|
||||
|
||||
|
||||
def update_resource(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard):
|
||||
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
|
||||
record.name = dashboard.name
|
||||
record.update_by = user.id
|
||||
record.update_time = int(time.time())
|
||||
session.add(record)
|
||||
session.commit()
|
||||
return record
|
||||
|
||||
|
||||
def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
|
||||
record = get_create_base_info(user, dashboard)
|
||||
record.node_type = dashboard.node_type
|
||||
record.component_data = dashboard.component_data
|
||||
record.canvas_style_data = dashboard.canvas_style_data
|
||||
record.canvas_view_info = dashboard.canvas_view_info
|
||||
session.add(record)
|
||||
session.flush()
|
||||
session.refresh(record)
|
||||
session.commit()
|
||||
return record
|
||||
|
||||
|
||||
def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
|
||||
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
|
||||
record.name = dashboard.name
|
||||
record.update_by = user.id
|
||||
record.update_time = int(time.time())
|
||||
record.component_data = dashboard.component_data
|
||||
record.canvas_style_data = dashboard.canvas_style_data
|
||||
record.canvas_view_info = dashboard.canvas_view_info
|
||||
session.add(record)
|
||||
session.commit()
|
||||
return record
|
||||
|
||||
|
||||
def validate_name(session: SessionDep,user: CurrentUser, dashboard: QueryDashboard) -> bool:
|
||||
if not dashboard.opt:
|
||||
raise ValueError("opt is required")
|
||||
oid = str(user.oid if user.oid is not None else 1)
|
||||
uid = str(user.id)
|
||||
|
||||
|
||||
if dashboard.opt in ('newLeaf', 'newFolder'):
|
||||
query = session.query(CoreDashboard).filter(
|
||||
and_(
|
||||
CoreDashboard.workspace_id == oid,
|
||||
CoreDashboard.create_by == uid,
|
||||
CoreDashboard.name == dashboard.name
|
||||
)
|
||||
)
|
||||
elif dashboard.opt in ('updateLeaf', 'updateFolder', 'rename'):
|
||||
if not dashboard.id:
|
||||
raise ValueError("id is required for update operation")
|
||||
query = session.query(CoreDashboard).filter(
|
||||
and_(
|
||||
CoreDashboard.workspace_id == oid,
|
||||
CoreDashboard.create_by == uid,
|
||||
CoreDashboard.name == dashboard.name,
|
||||
CoreDashboard.id != dashboard.id
|
||||
)
|
||||
)
|
||||
else:
|
||||
raise ValueError(f"Invalid opt value: {dashboard.opt}")
|
||||
return not session.query(query.exists()).scalar()
|
||||
|
||||
|
||||
def delete_resource(session: SessionDep, resource_id: str):
|
||||
sql = text("DELETE FROM core_dashboard WHERE id = :resource_id")
|
||||
result = session.execute(sql, {"resource_id": resource_id})
|
||||
session.commit()
|
||||
return result.rowcount > 0
|
||||
Reference in New Issue
Block a user