#!/bin/bash # 直接测试课程生成API(需要先获取Token) # 使用方法:先手动登录获取Token,然后运行此脚本 BASE_URL="https://api.muststudy.xin" echo "🧪 测试课程生成完整流程" echo "📍 API: $BASE_URL" echo "" echo "⚠️ 注意:此脚本需要先手动获取Token" echo " 请先登录获取Token,然后设置环境变量:" echo " export TEST_TOKEN='your_token_here'" echo "" if [ -z "$TEST_TOKEN" ]; then echo "❌ 未设置 TEST_TOKEN 环境变量" echo "" echo "获取Token的方法:" echo "1. 使用手机号登录(需要验证码)" echo "2. 或者使用现有的测试账号" echo "" echo "示例:" echo " export TEST_TOKEN='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'" echo " bash scripts/test-course-generation-direct.sh" exit 1 fi echo "✅ 使用Token: ${TEST_TOKEN:0:20}..." echo "" # 1. 创建课程 echo "1️⃣ 创建课程(精华版)..." CREATE_RESPONSE=$(curl -s -X POST "$BASE_URL/api/ai/content/upload" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $TEST_TOKEN" \ -d '{ "content": "社交是每个人都需要掌握的重要技能。在现代社会,良好的人际关系不仅能帮助我们获得更多机会,还能提升我们的生活质量。社交的核心在于建立有意义的人际关系,这种关系应该基于相互尊重、价值交换和长期维护。", "style": "essence" }') echo "创建响应: $CREATE_RESPONSE" | head -c 300 echo "" COURSE_ID=$(echo "$CREATE_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('courseId', ''))" 2>/dev/null) TASK_ID=$(echo "$CREATE_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('taskId', ''))" 2>/dev/null) if [ -z "$COURSE_ID" ]; then echo "❌ 创建课程失败" echo "完整响应: $CREATE_RESPONSE" exit 1 fi echo "" echo "✅ 课程创建成功" echo " Course ID: $COURSE_ID" echo " Task ID: $TASK_ID" echo "" # 2. 查询任务详情 echo "2️⃣ 查询任务详情..." TASK_RESPONSE=$(curl -s -X GET "$BASE_URL/api/ai/content/tasks/$TASK_ID" \ -H "Authorization: Bearer $TEST_TOKEN") TASK_STATUS=$(echo "$TASK_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('task', {}).get('status', 'N/A'))" 2>/dev/null) TASK_TITLE=$(echo "$TASK_RESPONSE" | python3 -c "import sys, json; data=json.load(sys.stdin); print(data.get('data', {}).get('task', {}).get('suggestedTitle', 'N/A'))" 2>/dev/null) echo " 任务状态: $TASK_STATUS" echo " 建议标题: $TASK_TITLE" echo "" # 3. 轮询查询状态 echo "3️⃣ 轮询查询生成状态(最多等待3分钟)..." MAX_ITERATIONS=60 LAST_PROGRESS="" for i in $(seq 1 $MAX_ITERATIONS); do sleep 3 STATUS_RESPONSE=$(curl -s -X GET "$BASE_URL/api/my-courses" \ -H "Authorization: Bearer $TEST_TOKEN") # 提取进度 PROGRESS=$(echo "$STATUS_RESPONSE" | python3 -c " import sys, json try: data = json.load(sys.stdin) courses = data.get('data', {}).get('courses', []) for course in courses: if course.get('id') == '$COURSE_ID': progress = course.get('generation_progress') status = course.get('generation_status') or course.get('status') title = course.get('title', 'N/A') error = course.get('error_message') if progress is not None: print(f\"{int(progress * 100)}|{status}|{title}|{error or ''}\") else: print(f\"N/A|{status}|{title}|{error or ''}\") break except Exception as e: pass " 2>/dev/null) if [ -n "$PROGRESS" ] && [ "$PROGRESS" != "$LAST_PROGRESS" ]; then PROG_VAL=$(echo "$PROGRESS" | cut -d'|' -f1) STATUS_VAL=$(echo "$PROGRESS" | cut -d'|' -f2) TITLE_VAL=$(echo "$PROGRESS" | cut -d'|' -f3) ERROR_VAL=$(echo "$PROGRESS" | cut -d'|' -f4) if [ "$PROG_VAL" != "N/A" ]; then echo " [$i/$MAX_ITERATIONS] 进度: ${PROG_VAL}% | 状态: $STATUS_VAL | 标题: $TITLE_VAL" else echo " [$i/$MAX_ITERATIONS] 状态: $STATUS_VAL | 标题: $TITLE_VAL" fi if [ -n "$ERROR_VAL" ]; then echo " ⚠️ 错误信息: $ERROR_VAL" fi LAST_PROGRESS="$PROGRESS" if [ "$STATUS_VAL" = "completed" ]; then echo "" echo "✅ 课程生成完成!" break fi if [ "$STATUS_VAL" = "failed" ]; then echo "" echo "❌ 课程生成失败" break fi fi done echo "" echo "4️⃣ 查询任务日志..." LOGS_RESPONSE=$(curl -s -X GET "$BASE_URL/api/ai/prompts/logs?taskId=$TASK_ID&limit=10" \ -H "Authorization: Bearer $TEST_TOKEN") LOG_INFO=$(echo "$LOGS_RESPONSE" | python3 -c " import sys, json try: data = json.load(sys.stdin) logs = data.get('data', {}).get('logs', []) print(f'总数: {len(logs)}') for log in logs[:10]: prompt_type = log.get('promptType', 'N/A') status = log.get('status', 'N/A') duration = log.get('duration', 0) tokens = log.get('tokensUsed', 0) error = log.get('errorMessage', '') print(f\" - {prompt_type} ({status}) - {duration}ms - {tokens}tokens\") if error: print(f\" 错误: {error}\") except Exception as e: print(f'解析失败: {e}') " 2>/dev/null) echo "$LOG_INFO" echo "" echo "✅ 测试完成!" echo "" echo "📊 测试总结:" echo " - Course ID: $COURSE_ID" echo " - Task ID: $TASK_ID" echo " - 最终状态: $STATUS_VAL" echo " - 最终标题: $TITLE_VAL"