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