feat: 添加CORS支持,优化API响应,重构工作流管理逻辑,支持本地存储设置
This commit is contained in:
@@ -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]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user