api.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. use App\Services\QuestionServiceApi;
  3. use Illuminate\Support\Facades\Route;
  4. /*
  5. |--------------------------------------------------------------------------
  6. | 题库管理 API 路由
  7. |--------------------------------------------------------------------------
  8. */
  9. // 题目相关 API
  10. Route::get('/questions', function (QuestionServiceApi $service) {
  11. try {
  12. $page = (int) request()->get('page', 1);
  13. $perPage = (int) request()->get('per_page', 25);
  14. $filters = [
  15. 'kp_code' => request()->get('kp_code'),
  16. 'difficulty' => request()->get('difficulty'),
  17. 'search' => request()->get('search'),
  18. ];
  19. $response = $service->listQuestions($page, $perPage, $filters);
  20. return response()->json($response);
  21. } catch (\Exception $e) {
  22. \Log::error('Failed to fetch questions: ' . $e->getMessage());
  23. return response()->json([
  24. 'data' => [],
  25. 'meta' => [
  26. 'page' => 1,
  27. 'per_page' => 25,
  28. 'total' => 0,
  29. 'total_pages' => 0,
  30. ],
  31. 'error' => $e->getMessage(),
  32. ], 500);
  33. }
  34. });
  35. // 获取题目统计信息
  36. Route::get('/questions/statistics', function (QuestionServiceApi $service) {
  37. try {
  38. $stats = $service->getStatistics();
  39. return response()->json($stats);
  40. } catch (\Exception $e) {
  41. \Log::error('Failed to get question statistics: ' . $e->getMessage());
  42. return response()->json(['error' => $e->getMessage()], 500);
  43. }
  44. });
  45. // 语义搜索题目
  46. Route::post('/questions/search', function (QuestionServiceApi $service) {
  47. try {
  48. $data = request()->only(['query', 'limit']);
  49. $results = $service->searchQuestions($data['query'], $data['limit'] ?? 20);
  50. return response()->json($results);
  51. } catch (\Exception $e) {
  52. \Log::error('Question search failed: ' . $e->getMessage());
  53. return response()->json(['error' => $e->getMessage()], 500);
  54. }
  55. });
  56. // 获取单个题目详情
  57. Route::get('/questions/{id}', function (int $id, QuestionServiceApi $service) {
  58. try {
  59. $question = $service->getQuestionById($id);
  60. if (!$question) {
  61. return response()->json(['error' => 'Question not found'], 404);
  62. }
  63. return response()->json($question);
  64. } catch (\Exception $e) {
  65. \Log::error("Failed to get question {$id}: " . $e->getMessage());
  66. return response()->json(['error' => $e->getMessage()], 500);
  67. }
  68. });
  69. // AI 生成题目
  70. Route::post('/questions/generate', function (QuestionServiceApi $service) {
  71. try {
  72. $data = request()->only(['kp_code', 'keyword', 'count', 'strategy']);
  73. $result = $service->generateQuestions($data);
  74. return response()->json($result);
  75. } catch (\Exception $e) {
  76. \Log::error('Question generation failed: ' . $e->getMessage());
  77. return response()->json([
  78. 'success' => false,
  79. 'message' => $e->getMessage(),
  80. ], 500);
  81. }
  82. });
  83. // 删除题目
  84. Route::delete('/questions/{id}', function (int $id, QuestionServiceApi $service) {
  85. try {
  86. $deleted = $service->deleteQuestion($id);
  87. return response()->json([
  88. 'success' => $deleted,
  89. 'message' => $deleted ? 'Question deleted' : 'Failed to delete',
  90. ]);
  91. } catch (\Exception $e) {
  92. \Log::error("Failed to delete question {$id}: " . $e->getMessage());
  93. return response()->json([
  94. 'success' => false,
  95. 'message' => $e->getMessage(),
  96. ], 500);
  97. }
  98. });
  99. // 获取知识点选项
  100. Route::get('/knowledge-points', function (QuestionServiceApi $service) {
  101. try {
  102. $points = $service->getKnowledgePointOptions();
  103. return response()->json($points);
  104. } catch (\Exception $e) {
  105. \Log::error('Failed to get knowledge points: ' . $e->getMessage());
  106. return response()->json([], 500);
  107. }
  108. });
  109. /*
  110. |--------------------------------------------------------------------------
  111. | MathRecSys 集成 API 路由
  112. |--------------------------------------------------------------------------
  113. */
  114. use App\Http\Controllers\Api\StudentController;
  115. // 健康检查
  116. Route::get('/mathrecsys/health', [StudentController::class, 'checkServiceHealth'])->name('api.mathrecsys.health');
  117. // 学生相关 API
  118. Route::prefix('mathrecsys/students')->name('api.mathrecsys.students.')->group(function () {
  119. // 获取学生完整信息
  120. Route::get('{studentId}', [StudentController::class, 'show'])->name('show');
  121. // 获取个性化推荐
  122. Route::get('{studentId}/recommendations', [StudentController::class, 'getRecommendations'])->name('recommendations');
  123. // 获取学习轨迹
  124. Route::get('{studentId}/trajectory', [StudentController::class, 'getTrajectory'])->name('trajectory');
  125. // 获取学习建议
  126. Route::get('{studentId}/suggestions', [StudentController::class, 'getSuggestions'])->name('suggestions');
  127. // 智能分析题目
  128. Route::post('{studentId}/analyze', [StudentController::class, 'analyzeQuestion'])->name('analyze');
  129. // 更新掌握度
  130. Route::put('{studentId}/mastery', [StudentController::class, 'updateMastery'])->name('update-mastery');
  131. });
  132. // 班级分析 API
  133. Route::prefix('mathrecsys/classes')->name('api.mathrecsys.classes.')->group(function () {
  134. Route::get('{classId}/analysis', [StudentController::class, 'classAnalysis'])->name('analysis');
  135. });
  136. // 测试 API
  137. Route::get('/mathrecsys/test', function () {
  138. return response()->json([
  139. 'success' => true,
  140. 'message' => 'MathRecSys API integration is working',
  141. 'timestamp' => now()->toISOString()
  142. ]);
  143. })->name('api.mathrecsys.test');