154 lines
7.5 KiB
Python
154 lines
7.5 KiB
Python
from fastapi import APIRouter, Depends, Request
|
|
from sqlmodel import Session
|
|
|
|
from core.database import get_session
|
|
from schemas.dashboard import (
|
|
BotCreateRequest,
|
|
BotDeployRequest,
|
|
BotEnvParamsUpdateRequest,
|
|
BotMcpConfigUpdateRequest,
|
|
BotToolsConfigUpdateRequest,
|
|
BotUpdateRequest,
|
|
ChannelConfigRequest,
|
|
ChannelConfigUpdateRequest,
|
|
)
|
|
|
|
from api.dashboard_router_support import DashboardRouterDeps
|
|
|
|
|
|
def build_dashboard_bot_admin_router(*, deps: DashboardRouterDeps) -> APIRouter:
|
|
router = APIRouter()
|
|
|
|
@router.post("/api/bots")
|
|
def create_bot(payload: BotCreateRequest, session: Session = Depends(get_session)):
|
|
return deps.bot_lifecycle_service.create_bot(session=session, payload=payload)
|
|
|
|
@router.get("/api/bots")
|
|
def list_bots(request: Request, session: Session = Depends(get_session)):
|
|
current_user_id = int(getattr(request.state, "sys_user_id", 0) or 0)
|
|
return deps.bot_query_service.list_bots(app_state=request.app.state, session=session, current_user_id=current_user_id)
|
|
|
|
@router.get("/api/bots/{bot_id}")
|
|
def get_bot_detail(bot_id: str, request: Request, session: Session = Depends(get_session)):
|
|
return deps.bot_query_service.get_bot_detail(app_state=request.app.state, session=session, bot_id=bot_id)
|
|
|
|
@router.get("/api/bots/{bot_id}/resources")
|
|
def get_bot_resources(bot_id: str, request: Request, session: Session = Depends(get_session)):
|
|
return deps.bot_query_service.get_bot_resources(app_state=request.app.state, session=session, bot_id=bot_id)
|
|
|
|
@router.put("/api/bots/{bot_id}")
|
|
def update_bot(bot_id: str, payload: BotUpdateRequest, session: Session = Depends(get_session)):
|
|
return deps.bot_lifecycle_service.update_bot(session=session, bot_id=bot_id, payload=payload)
|
|
|
|
@router.post("/api/bots/{bot_id}/deploy")
|
|
async def deploy_bot(bot_id: str, payload: BotDeployRequest, request: Request, session: Session = Depends(get_session)):
|
|
return await deps.bot_lifecycle_service.deploy_bot(
|
|
app_state=request.app.state,
|
|
session=session,
|
|
bot_id=bot_id,
|
|
node_id=payload.node_id,
|
|
runtime_kind=payload.runtime_kind,
|
|
image_tag=payload.image_tag,
|
|
auto_start=bool(payload.auto_start),
|
|
)
|
|
|
|
@router.post("/api/bots/{bot_id}/start")
|
|
async def start_bot(bot_id: str, request: Request, session: Session = Depends(get_session)):
|
|
return await deps.bot_lifecycle_service.start_bot(app_state=request.app.state, session=session, bot_id=bot_id)
|
|
|
|
@router.post("/api/bots/{bot_id}/stop")
|
|
def stop_bot(bot_id: str, request: Request, session: Session = Depends(get_session)):
|
|
return deps.bot_lifecycle_service.stop_bot(app_state=request.app.state, session=session, bot_id=bot_id)
|
|
|
|
@router.post("/api/bots/{bot_id}/enable")
|
|
def enable_bot(bot_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_lifecycle_service.enable_bot(session=session, bot_id=bot_id)
|
|
|
|
@router.post("/api/bots/{bot_id}/disable")
|
|
def disable_bot(bot_id: str, request: Request, session: Session = Depends(get_session)):
|
|
return deps.bot_lifecycle_service.disable_bot(app_state=request.app.state, session=session, bot_id=bot_id)
|
|
|
|
@router.post("/api/bots/{bot_id}/deactivate")
|
|
def deactivate_bot(bot_id: str, request: Request, session: Session = Depends(get_session)):
|
|
return deps.bot_lifecycle_service.deactivate_bot(app_state=request.app.state, session=session, bot_id=bot_id)
|
|
|
|
@router.delete("/api/bots/{bot_id}")
|
|
def delete_bot(bot_id: str, request: Request, delete_workspace: bool = True, session: Session = Depends(get_session)):
|
|
return deps.bot_lifecycle_service.delete_bot(
|
|
app_state=request.app.state,
|
|
session=session,
|
|
bot_id=bot_id,
|
|
delete_workspace=delete_workspace,
|
|
)
|
|
|
|
@router.get("/api/bots/{bot_id}/channels")
|
|
def list_bot_channels(bot_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_channel_service.list_channels(session=session, bot_id=bot_id)
|
|
|
|
@router.post("/api/bots/{bot_id}/channels")
|
|
def create_bot_channel(bot_id: str, payload: ChannelConfigRequest, session: Session = Depends(get_session)):
|
|
return deps.bot_channel_service.create_channel(session=session, bot_id=bot_id, payload=payload)
|
|
|
|
@router.put("/api/bots/{bot_id}/channels/{channel_id}")
|
|
def update_bot_channel(bot_id: str, channel_id: str, payload: ChannelConfigUpdateRequest, session: Session = Depends(get_session)):
|
|
return deps.bot_channel_service.update_channel(
|
|
session=session,
|
|
bot_id=bot_id,
|
|
channel_id=channel_id,
|
|
payload=payload,
|
|
)
|
|
|
|
@router.delete("/api/bots/{bot_id}/channels/{channel_id}")
|
|
def delete_bot_channel(bot_id: str, channel_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_channel_service.delete_channel(session=session, bot_id=bot_id, channel_id=channel_id)
|
|
|
|
@router.get("/api/bots/{bot_id}/tools-config")
|
|
def get_bot_tools_config(bot_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_query_service.get_tools_config(session=session, bot_id=bot_id)
|
|
|
|
@router.put("/api/bots/{bot_id}/tools-config")
|
|
def update_bot_tools_config(bot_id: str, payload: BotToolsConfigUpdateRequest, session: Session = Depends(get_session)):
|
|
return deps.bot_query_service.update_tools_config(session=session, bot_id=bot_id, payload=payload)
|
|
|
|
@router.get("/api/bots/{bot_id}/mcp-config")
|
|
def get_bot_mcp_config(bot_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_config_state_service.get_mcp_config_for_bot(session=session, bot_id=bot_id)
|
|
|
|
@router.put("/api/bots/{bot_id}/mcp-config")
|
|
def update_bot_mcp_config(bot_id: str, payload: BotMcpConfigUpdateRequest, session: Session = Depends(get_session)):
|
|
return deps.bot_config_state_service.update_mcp_config_for_bot(
|
|
session=session,
|
|
bot_id=bot_id,
|
|
mcp_servers=payload.mcp_servers,
|
|
)
|
|
|
|
@router.get("/api/bots/{bot_id}/env-params")
|
|
def get_bot_env_params(bot_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_config_state_service.get_env_params_for_bot(session=session, bot_id=bot_id)
|
|
|
|
@router.put("/api/bots/{bot_id}/env-params")
|
|
def update_bot_env_params(bot_id: str, payload: BotEnvParamsUpdateRequest, session: Session = Depends(get_session)):
|
|
return deps.bot_config_state_service.update_env_params_for_bot(
|
|
session=session,
|
|
bot_id=bot_id,
|
|
env_params=payload.env_params,
|
|
)
|
|
|
|
@router.get("/api/bots/{bot_id}/cron/jobs")
|
|
def list_cron_jobs(bot_id: str, include_disabled: bool = True, session: Session = Depends(get_session)):
|
|
return deps.bot_config_state_service.list_cron_jobs_for_bot(
|
|
session=session,
|
|
bot_id=bot_id,
|
|
include_disabled=include_disabled,
|
|
)
|
|
|
|
@router.post("/api/bots/{bot_id}/cron/jobs/{job_id}/stop")
|
|
def stop_cron_job(bot_id: str, job_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_config_state_service.stop_cron_job_for_bot(session=session, bot_id=bot_id, job_id=job_id)
|
|
|
|
@router.delete("/api/bots/{bot_id}/cron/jobs/{job_id}")
|
|
def delete_cron_job(bot_id: str, job_id: str, session: Session = Depends(get_session)):
|
|
return deps.bot_config_state_service.delete_cron_job_for_bot(session=session, bot_id=bot_id, job_id=job_id)
|
|
|
|
return router
|