Files
joke/optimizer/main.py
T
bwstudio ceed63fcb0 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
2026-06-02 20:35:08 +08:00

100 lines
2.7 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.
"""
笑话优化 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()