feat: 添加CORS支持,优化API响应,重构工作流管理逻辑,支持本地存储设置

This commit is contained in:
iHeyTang
2025-08-11 15:24:42 +08:00
parent e3dfffad7d
commit 745319962c
5 changed files with 338 additions and 277 deletions

View File

@@ -1,3 +1,4 @@
from datetime import datetime
import aiosqlite
import json
import re
@@ -20,23 +21,28 @@ async def init_db():
print(f"数据库 '{DATABASE_FILE}' 已准备就绪。")
async def save_workflow(name: str, workflow_json: str):
# 正则表达式修正为匹配更精确的版本格式 [YYYYMMDDHHMMSS]
version_match = re.search(r"\[(\d{14})\]$", name)
if not version_match:
raise ValueError("Workflow name must have a version suffix like [YYYYMMDDHHMMSS]")
version = version_match.group(1)
base_name = re.sub(r"\s*\[\d{14}\]$", "", name).strip()
version = datetime.now().strftime("%Y%m%d%H%M%S")
async with aiosqlite.connect(DATABASE_FILE) as db:
await db.execute(
"INSERT OR REPLACE INTO workflows (name, base_name, version, workflow_json) VALUES (?, ?, ?, ?)",
(name, base_name, version, workflow_json)
(f"{name} [{version}]", name, version, workflow_json)
)
await db.commit()
async def get_all_workflows() -> list[dict]:
async with aiosqlite.connect(DATABASE_FILE) as db:
db.row_factory = aiosqlite.Row
cursor = await db.execute("SELECT name, workflow_json FROM workflows")
# 按 base_name 分组,获取每个基础名称的最新版本记录
cursor = await db.execute("""
SELECT w1.name, w1.workflow_json, w1.base_name, w1.version
FROM workflows w1
INNER JOIN (
SELECT base_name, MAX(version) as max_version
FROM workflows
GROUP BY base_name
) w2 ON w1.base_name = w2.base_name AND w1.version = w2.max_version
ORDER BY w1.base_name
""")
rows = await cursor.fetchall()
return [{"name": row["name"], "workflow": json.loads(row["workflow_json"])} for row in rows]