From b9a458af538b2de342eaef0e4cd97d88b32a60a2 Mon Sep 17 00:00:00 2001 From: ymq Date: Fri, 14 Aug 2026 18:07:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=208=20=E4=B8=AA=20workspace=20dspy=20?= =?UTF-8?q?=E5=86=85=E8=81=94=E9=87=8D=E5=A4=8D=E9=80=BB=E8=BE=91=E6=94=B6?= =?UTF-8?q?=E6=95=9B=E5=88=B0=20get=5Fworkspace=5Fdir/get=5Fworkspace=5Fba?= =?UTF-8?q?se?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wwwroot/api/cockpit_chat.dspy | 8 +------- wwwroot/api/workspace_browse.dspy | 26 +------------------------- wwwroot/api/workspace_delete.dspy | 22 +--------------------- wwwroot/api/workspace_file.dspy | 22 +--------------------- wwwroot/api/workspace_files.dspy | 22 +--------------------- wwwroot/api/workspace_open.dspy | 22 +--------------------- wwwroot/api/workspace_tree.dspy | 25 +------------------------ wwwroot/api/workspace_upload.dspy | 22 +--------------------- 8 files changed, 8 insertions(+), 161 deletions(-) diff --git a/wwwroot/api/cockpit_chat.dspy b/wwwroot/api/cockpit_chat.dspy index 7d21897..5367cd4 100644 --- a/wwwroot/api/cockpit_chat.dspy +++ b/wwwroot/api/cockpit_chat.dspy @@ -202,13 +202,7 @@ async def _exec_tool(sor, tool, params, ctx, uid, org_id): if ex: return f'FAIL: 项目「{name}」已存在' pid = getID() wid = getID() - _wsb = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe("SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - _wsb = getattr(_wbr[0], 'params_value', '') - except Exception: - pass + _wsb = await get_workspace_base(sor) ws = _wsb + '/' + str(org_id) + '/' + name await sor.C('sd_projects',{'id':pid,'name':name,'description':p.get('description',''),'workspace_dir':ws,'org_id':org_id,'created_by':uid}) await sor.C('sd_iterations',{'id':wid,'project_id':pid,'iteration_name':'默认迭代','iteration_type':'default','status':'active','priority':1,'org_id':org_id}) diff --git a/wwwroot/api/workspace_browse.dspy b/wwwroot/api/workspace_browse.dspy index 329f0c7..a2049a5 100644 --- a/wwwroot/api/workspace_browse.dspy +++ b/wwwroot/api/workspace_browse.dspy @@ -8,31 +8,7 @@ dbname = get_module_dbname('pipeline-sdlc') import os async with DBPools().sqlorContext(dbname) as sor: - workspace_base = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe("SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - workspace_base = getattr(_wbr[0], 'params_value', '') - except Exception: - pass - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", - {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' - - ws_dir = '' - if pid: - proj = await sor.sqlExe( - "SELECT name, org_id, workspace_dir FROM sd_projects WHERE id=${p}$", - {"p": pid}) - if proj: - pname = getattr(proj[0], 'name', '') - org_id = getattr(proj[0], 'org_id', '0') or '0' - ws = getattr(proj[0], 'workspace_dir', '') or '' - if ws and ws.startswith('/'): - ws_dir = ws - else: - ws_dir = workspace_base + '/' + org_id + '/' + pname + ws_dir, _ = await get_workspace_dir(sor, uid) if not ws_dir or not os.path.isdir(ws_dir): return json.dumps({"error": "工作空间不存在: " + ws_dir, "tree": {"name": "", "children": [], "files": []}}, ensure_ascii=False) diff --git a/wwwroot/api/workspace_delete.dspy b/wwwroot/api/workspace_delete.dspy index c2511c8..71cafb4 100644 --- a/wwwroot/api/workspace_delete.dspy +++ b/wwwroot/api/workspace_delete.dspy @@ -11,27 +11,7 @@ if not uid: dbname = get_module_dbname('pipeline-sdlc') async with DBPools().sqlorContext(dbname) as sor: - workspace_base = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe("SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - workspace_base = getattr(_wbr[0], 'params_value', '') - except Exception: - pass - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' - ws_dir = '' - if pid: - proj = await sor.sqlExe("SELECT name, org_id, workspace_dir FROM sd_projects WHERE id=${p}$", {"p": pid}) - if proj: - ws = getattr(proj[0], 'workspace_dir', '') or '' - if ws.startswith('/'): - ws_dir = ws - else: - pname = getattr(proj[0], 'name', '') - org_id = getattr(proj[0], 'org_id', '0') or '0' - ws_dir = workspace_base + '/' + org_id + '/' + pname + ws_dir, _ = await get_workspace_dir(sor, uid) if not file_id or file_id == '__root__': return {"status": "error", "message": "不能删除根目录"} diff --git a/wwwroot/api/workspace_file.dspy b/wwwroot/api/workspace_file.dspy index 61668b7..9fa4a6e 100644 --- a/wwwroot/api/workspace_file.dspy +++ b/wwwroot/api/workspace_file.dspy @@ -14,27 +14,7 @@ if not uid: dbname = get_module_dbname('pipeline-sdlc') async with DBPools().sqlorContext(dbname) as sor: - workspace_base = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe("SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - workspace_base = getattr(_wbr[0], 'params_value', '') - except Exception: - pass - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' - ws_dir = '' - if pid: - proj = await sor.sqlExe("SELECT name, org_id, workspace_dir FROM sd_projects WHERE id=${p}$", {"p": pid}) - if proj: - ws = getattr(proj[0], 'workspace_dir', '') or '' - if ws.startswith('/'): - ws_dir = ws - else: - pname = getattr(proj[0], 'name', '') - org_id = getattr(proj[0], 'org_id', '0') or '0' - ws_dir = workspace_base + '/' + org_id + '/' + pname + ws_dir, _ = await get_workspace_dir(sor, uid) if not file_id or file_id == '__root__': return {"widgettype": "Message", "options": {"title": "错误", "message": "未指定文件"}} diff --git a/wwwroot/api/workspace_files.dspy b/wwwroot/api/workspace_files.dspy index 447b37e..fe20bb9 100644 --- a/wwwroot/api/workspace_files.dspy +++ b/wwwroot/api/workspace_files.dspy @@ -12,27 +12,7 @@ if not uid: dbname = get_module_dbname('pipeline-sdlc') async with DBPools().sqlorContext(dbname) as sor: - workspace_base = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe("SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - workspace_base = getattr(_wbr[0], 'params_value', '') - except Exception: - pass - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' - ws_dir = '' - if pid: - proj = await sor.sqlExe("SELECT name, org_id, workspace_dir FROM sd_projects WHERE id=${p}$", {"p": pid}) - if proj: - ws = getattr(proj[0], 'workspace_dir', '') or '' - if ws.startswith('/'): - ws_dir = ws - else: - pname = getattr(proj[0], 'name', '') - org_id = getattr(proj[0], 'org_id', '0') or '0' - ws_dir = workspace_base + '/' + org_id + '/' + pname + ws_dir, _ = await get_workspace_dir(sor, uid) if not folder_id or folder_id == '__root__': full_dir = ws_dir diff --git a/wwwroot/api/workspace_open.dspy b/wwwroot/api/workspace_open.dspy index f21ac20..1ac1dfc 100644 --- a/wwwroot/api/workspace_open.dspy +++ b/wwwroot/api/workspace_open.dspy @@ -13,27 +13,7 @@ if not uid: dbname = get_module_dbname('pipeline-sdlc') async with DBPools().sqlorContext(dbname) as sor: - workspace_base = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe("SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - workspace_base = getattr(_wbr[0], 'params_value', '') - except Exception: - pass - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' - ws_dir = '' - if pid: - proj = await sor.sqlExe("SELECT name, org_id, workspace_dir FROM sd_projects WHERE id=${p}$", {"p": pid}) - if proj: - ws = getattr(proj[0], 'workspace_dir', '') or '' - if ws.startswith('/'): - ws_dir = ws - else: - pname = getattr(proj[0], 'name', '') - org_id = getattr(proj[0], 'org_id', '0') or '0' - ws_dir = workspace_base + '/' + org_id + '/' + pname + ws_dir, _ = await get_workspace_dir(sor, uid) if not file_id: return {"widgettype": "Message", "options": {"title": "打开失败", "message": "未指定文件"}} diff --git a/wwwroot/api/workspace_tree.dspy b/wwwroot/api/workspace_tree.dspy index 7eacd87..7fc8dcd 100644 --- a/wwwroot/api/workspace_tree.dspy +++ b/wwwroot/api/workspace_tree.dspy @@ -11,30 +11,7 @@ if not uid: dbname = get_module_dbname('pipeline-sdlc') async with DBPools().sqlorContext(dbname) as sor: - # workspace_base 从 appbase params 表读(可动态配置),默认值兜底 - workspace_base = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe( - "SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - workspace_base = getattr(_wbr[0], 'params_value', '') - except Exception: - pass - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", - {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' - - ws_dir = '' - if pid: - proj = await sor.sqlExe( - "SELECT name, org_id, workspace_dir FROM sd_projects WHERE id=${p}$", - {"p": pid}) - if proj: - pname = getattr(proj[0], 'name', '') - org_id = getattr(proj[0], 'org_id', '0') or '0' - ws = getattr(proj[0], 'workspace_dir', '') or '' - ws_dir = ws if ws.startswith('/') else workspace_base + '/' + org_id + '/' + pname + ws_dir, _ = await get_workspace_dir(sor, uid) if not ws_dir or not os.path.isdir(ws_dir): if not node_id: diff --git a/wwwroot/api/workspace_upload.dspy b/wwwroot/api/workspace_upload.dspy index ace511b..0c4c486 100644 --- a/wwwroot/api/workspace_upload.dspy +++ b/wwwroot/api/workspace_upload.dspy @@ -14,27 +14,7 @@ if not uid: dbname = get_module_dbname('pipeline-sdlc') async with DBPools().sqlorContext(dbname) as sor: - workspace_base = '/d/pipeline/workspaces' - try: - _wbr = await sor.sqlExe("SELECT params_value FROM params WHERE params_name='workspace_base' LIMIT 1", {}) - if _wbr and getattr(_wbr[0], 'params_value', ''): - workspace_base = getattr(_wbr[0], 'params_value', '') - except Exception: - pass - recs = await sor.sqlExe( - "SELECT current_project_id FROM pipeline_agent_settings WHERE user_id=${u}$", {"u": uid}) - pid = getattr(recs[0], 'current_project_id', '') if recs else '' - ws_dir = '' - if pid: - proj = await sor.sqlExe("SELECT name, org_id, workspace_dir FROM sd_projects WHERE id=${p}$", {"p": pid}) - if proj: - ws = getattr(proj[0], 'workspace_dir', '') or '' - if ws.startswith('/'): - ws_dir = ws - else: - pname = getattr(proj[0], 'name', '') - org_id = getattr(proj[0], 'org_id', '0') or '0' - ws_dir = workspace_base + '/' + org_id + '/' + pname + ws_dir, _ = await get_workspace_dir(sor, uid) if not ws_dir or not os.path.isdir(ws_dir): return {"status": "error", "message": "工作空间目录不可用"}