PaperAssembleController.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Question;
  5. use Illuminate\Http\JsonResponse;
  6. use Illuminate\Http\Request;
  7. class PaperAssembleController extends Controller
  8. {
  9. public function __invoke(Request $request): JsonResponse
  10. {
  11. $count = max(1, min(200, (int) $request->input('count', 10)));
  12. $kpCodes = (array) $request->input('kp_codes', []);
  13. $types = (array) $request->input('question_types', []);
  14. $query = Question::query();
  15. if (!empty($kpCodes)) {
  16. $query->whereIn('kp_code', $kpCodes);
  17. }
  18. if (!empty($types)) {
  19. $query->whereIn('question_type', $types);
  20. }
  21. $stageGrade = $this->normalizeStageGrade((int) $request->input('grade'));
  22. if ($stageGrade !== null) {
  23. $query->where('grade', $stageGrade);
  24. }
  25. $questions = $query->inRandomOrder()->limit($count)->get();
  26. return response()->json([
  27. 'count' => $questions->count(),
  28. 'data' => $questions,
  29. ]);
  30. }
  31. private function normalizeStageGrade(int $grade): ?int
  32. {
  33. if ($grade <= 0) {
  34. return null;
  35. }
  36. return $grade <= 9 ? 2 : 3;
  37. }
  38. }