from fastapi import APIRouter, File, UploadFile, HTTPException from apps.dashboard.crud.dashboard_service import list_resource, load_resource, \ create_resource, create_canvas, validate_name, delete_resource, update_resource, update_canvas from apps.dashboard.models.dashboard_model import CreateDashboard, BaseDashboard, QueryDashboard, DashboardResponse from common.audit.models.log_model import OperationType, OperationModules from common.audit.schemas.logger_decorator import LogConfig, system_log from common.core.deps import SessionDep, CurrentUser router = APIRouter(tags=["dashboard"], prefix="/dashboard") @router.post("/list_resource") async def list_resource_api(session: SessionDep, dashboard: QueryDashboard, current_user: CurrentUser): return list_resource(session=session, dashboard=dashboard, current_user=current_user) @router.post("/load_resource") async def load_resource_api(session: SessionDep, dashboard: QueryDashboard): return load_resource(session=session, dashboard=dashboard) @router.post("/create_resource", response_model=BaseDashboard) async def create_resource_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): return create_resource(session, user, dashboard) @router.post("/update_resource", response_model=BaseDashboard) @system_log(LogConfig( operation_type=OperationType.UPDATE, module=OperationModules.DASHBOARD, resource_id_expr="dashboard.id" )) async def update_resource_api(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard): return update_resource(session=session, user=user, dashboard=dashboard) @router.delete("/delete_resource/{resource_id}/{name}") @system_log(LogConfig( operation_type=OperationType.DELETE, module=OperationModules.DASHBOARD, resource_id_expr="resource_id", remark_expr="name" )) async def delete_resource_api(session: SessionDep, resource_id: str, name: str): return delete_resource(session, resource_id) @router.post("/create_canvas", response_model=BaseDashboard) @system_log(LogConfig( operation_type=OperationType.CREATE, module=OperationModules.DASHBOARD, result_id_expr="id" )) async def create_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): return create_canvas(session, user, dashboard) @router.post("/update_canvas", response_model=BaseDashboard) @system_log(LogConfig( operation_type=OperationType.UPDATE, module=OperationModules.DASHBOARD, resource_id_expr="dashboard.id" )) async def update_canvas_api(session: SessionDep, user: CurrentUser, dashboard: CreateDashboard): return update_canvas(session, user, dashboard) @router.post("/check_name") async def check_name_api(session: SessionDep, user: CurrentUser, dashboard: QueryDashboard): return validate_name(session, user, dashboard)