@@ -0,0 +1,84 @@
|
||||
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
|
||||
Reference in New Issue
Block a user