Files
to_docx/server/issue_db.py
T
2026-05-12 08:59:02 +08:00

85 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import json
import time
from datetime import datetime
from pathlib import Path
# Issue 数据存储在独立的 JSON 文件中
ISSUES_PATH = Path(__file__).parent / "issues.json"
def load_issues():
"""加载所有 Issue 数据"""
if ISSUES_PATH.exists():
try:
with open(ISSUES_PATH, "r", encoding="utf-8") as f:
return json.load(f)
except Exception:
return []
return []
def save_issues(issues: list):
"""保存 Issue 数据到文件"""
with open(ISSUES_PATH, "w", encoding="utf-8") as f:
json.dump(issues, f, indent=2, ensure_ascii=False)
def create_issue(user_id: int, username: str, title: str, issue_type: str, description: str, markdown_sample: str = ""):
"""创建一条新 Issue"""
issues = load_issues()
new_issue = {
"id": int(time.time() * 1000),
"user_id": user_id,
"username": username,
"title": title,
"type": issue_type,
"description": description,
"markdown_sample": markdown_sample,
"status": "open",
"created_at": datetime.now().isoformat(),
"replies": []
}
# 插入到最前面(最新的在前)
issues.insert(0, new_issue)
save_issues(issues)
return new_issue
def get_all_issues():
"""获取所有 Issue(管理员用)"""
return load_issues()
def get_user_issues(user_id: int):
"""获取某用户提交的所有 Issue"""
issues = load_issues()
return [i for i in issues if i.get("user_id") == user_id]
def get_issue_by_id(issue_id: int):
"""根据 ID 获取单条 Issue"""
for i in load_issues():
if i.get("id") == issue_id:
return i
return None
def add_reply(issue_id: int, author: str, content: str):
"""给指定 Issue 添加一条回复"""
issues = load_issues()
for i in issues:
if i.get("id") == issue_id:
reply = {
"id": int(time.time() * 1000),
"author": author,
"content": content,
"created_at": datetime.now().isoformat()
}
i["replies"].append(reply)
save_issues(issues)
return reply
return None
def update_issue_status(issue_id: int, status: str):
"""更新 Issue 的状态(open / in_progress / closed"""
issues = load_issues()
for i in issues:
if i.get("id") == issue_id:
i["status"] = status
save_issues(issues)
return i
return None