refactor: new resource

This commit is contained in:
wangjiahao
2025-06-09 22:13:03 +08:00
parent e5ae9b5ceb
commit 8fd76c4b20
8 changed files with 93 additions and 53 deletions
+11 -5
View File
@@ -1,16 +1,17 @@
from xmlrpc.client import Boolean
from fastapi import APIRouter, File, UploadFile, HTTPException
from apps.dashboard.crud.dashboard_service import get_dashboard_list, preview_with_id, \
create_resource, create_canvas
from apps.dashboard.models.dashboard_model import CreateDashboard,BaseDashboard
create_resource, create_canvas, validate_name
from apps.dashboard.models.dashboard_model import CreateDashboard, BaseDashboard, QueryDashboard
from common.core.deps import SessionDep, CurrentUser
router = APIRouter(tags=["dashboard"], prefix="/dashboard")
@router.post("/list")
async def datasource_list(session: SessionDep):
return get_dashboard_list(session=session)
async def datasource_list(session: SessionDep,dashboard: QueryDashboard):
return get_dashboard_list(session=session,dashboard=dashboard)
@router.get("/preview_dashboard/{id}")
async def preview_dashboard(session: SessionDep,id:str):
@@ -30,4 +31,9 @@ async def add_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDa
@router.post("/update_canvas", response_model=BaseDashboard)
async def update(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
return
return
@router.post("/check_name")
async def check_name(session: SessionDep, dashboard: QueryDashboard):
return validate_name(session,dashboard)
@@ -1,10 +1,9 @@
from sqlalchemy import select
from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard
from sqlalchemy import select, and_, text
from apps.dashboard.models.dashboard_model import CoreDashboard, CreateDashboard, QueryDashboard
from common.core.deps import SessionDep, CurrentUser
from sqlmodel import text
import uuid
import datetime
def get_dashboard_list(session: SessionDep):
def get_dashboard_list(session: SessionDep,dashboard: QueryDashboard):
sql = text("SELECT id, name, type,node_type, pid, create_time FROM core_dashboard")
for row in session.exec(sql).mappings():
yield CoreDashboard(**row)
@@ -45,4 +44,36 @@ def create_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashb
return record
def update_canvas(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard):
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
record = session.query(CoreDashboard).filter(CoreDashboard.id == dashboard.id).first()
def validate_name( session: SessionDep, dashboard: QueryDashboard) -> bool:
if not dashboard.workspace_id:
raise ValueError("workspace_id is required")
if not dashboard.pid:
raise ValueError("pid is required")
if not dashboard.opt:
raise ValueError("opt is required")
if dashboard.opt in ('newLeaf', 'newFolder'):
query = session.query(CoreDashboard).filter(
and_(
CoreDashboard.workspace_id == dashboard.workspace_id,
CoreDashboard.pid == dashboard.pid,
CoreDashboard.name == dashboard.name
)
)
elif dashboard.opt in ('updateLeaf', 'updateFolder'):
if not dashboard.id:
raise ValueError("id is required for update operation")
query = session.query(CoreDashboard).filter(
and_(
CoreDashboard.workspace_id == dashboard.workspace_id,
CoreDashboard.pid == dashboard.pid,
CoreDashboard.name == dashboard.name,
CoreDashboard.id != dashboard.id
)
)
else:
raise ValueError(f"Invalid opt value: {dashboard.opt}")
return not session.query(query.exists()).scalar()
@@ -141,9 +141,12 @@ class BaseDashboard(BaseModel):
node_type: str = ''
create_by: int = 0
class QueryDashboard(BaseDashboard):
opt: str = ''
# dashboard create obj
class CreateDashboard(BaseDashboard):
class CreateDashboard(QueryDashboard):
canvas_style_data: str =''
component_data: str = ''
description: str = ''