fix: resolve 10 code review issues
High priority: - Fix concurrent race condition for view_count/like_count (atomic update) - Add route request ID tracking to prevent race conditions - Filter get_joke by status=approved (no pending content leak) - Add error feedback for like button Performance: - Optimize random joke query (avoid full table sort) - Limit page_size max to 100 (DoS prevention) Medium: - Add localStorage quota error handling - Handle empty AI response gracefully - Fix generate content title extraction Low: - Add rejected_jokes to stats API - Update dashboard to show rejected count
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
"""
|
||||
笑话优化 CLI 工具。
|
||||
循环检测所有笑话 → AI 质量检测 → AI 润色 → AI 评价分类。
|
||||
|
||||
用法:
|
||||
python optimizer/main.py # 处理所有 pending/approved 笑话
|
||||
python optimizer/main.py --status rejected # 只处理已拒绝的
|
||||
python optimizer/main.py --limit 10 # 只处理前 10 条
|
||||
python optimizer/main.py --id 1,2,3 # 指定 ID 处理
|
||||
python optimizer/main.py --api-url http://localhost:8001
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from optimizer.optimizer import Optimizer
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(description="笑话优化工具 — 质量检测 / AI 润色 / 评价分类")
|
||||
|
||||
parser.add_argument(
|
||||
"--api-url",
|
||||
type=str,
|
||||
default=os.getenv("API_URL", "http://localhost:8001"),
|
||||
help="API 地址(默认: http://localhost:8001)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--username",
|
||||
type=str,
|
||||
default=os.getenv("API_USERNAME", "admin"),
|
||||
help="管理员用户名(默认: admin)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--password",
|
||||
type=str,
|
||||
default=os.getenv("API_PASSWORD", "admin123"),
|
||||
help="管理员密码(默认: admin123)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--status",
|
||||
type=str,
|
||||
default=None,
|
||||
choices=["pending", "approved", "rejected"],
|
||||
help="按状态筛选(默认: 全部)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--limit",
|
||||
type=int,
|
||||
default=None,
|
||||
help="最多处理 N 条(默认: 全部)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--id",
|
||||
type=str,
|
||||
default=None,
|
||||
dest="ids",
|
||||
help="指定笑话 ID,逗号分隔(如: 1,2,3)",
|
||||
)
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
|
||||
ids = None
|
||||
if args.ids:
|
||||
ids = [int(x.strip()) for x in args.ids.split(",") if x.strip()]
|
||||
|
||||
print(f"=" * 50)
|
||||
print(f"笑话优化工具")
|
||||
print(f"API 地址: {args.api_url}")
|
||||
print(f"筛选状态: {args.status or '全部'}")
|
||||
if args.limit:
|
||||
print(f"处理上限: {args.limit} 条")
|
||||
if ids:
|
||||
print(f"指定 ID: {ids}")
|
||||
print(f"=" * 50)
|
||||
|
||||
optimizer = Optimizer(
|
||||
api_base=args.api_url,
|
||||
username=args.username,
|
||||
password=args.password,
|
||||
)
|
||||
|
||||
try:
|
||||
optimizer.run(status=args.status, limit=args.limit, ids=ids)
|
||||
except KeyboardInterrupt:
|
||||
print("\n用户中断")
|
||||
except Exception as e:
|
||||
print(f"\n[!] 运行错误: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user