Compare commits

...

2 Commits

  1. 24
      app/Http/Controllers/Api/ExerciseController.php
  2. 30
      app/Services/ExerciseService.php
  3. 9437
      composer.lock
  4. 1
      routes/api.php

@ -6,9 +6,9 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\CreateExerciseRequest; use App\Http\Requests\CreateExerciseRequest;
use App\Services\ExerciseService; use App\Services\ExerciseService;
use App\Services\ExerciseSkillService; use App\Services\ExerciseSkillService;
use App\Services\QuestionGroupService;
use App\Services\QuestionService; use App\Services\QuestionService;
use App\Services\SkillService; use App\Services\SkillService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
class ExerciseController extends Controller class ExerciseController extends Controller
@ -24,7 +24,25 @@ class ExerciseController extends Controller
$this->skillService = $skillService; $this->skillService = $skillService;
$this->exerciseSkillService = $exerciseSkillService; $this->exerciseSkillService = $exerciseSkillService;
$this->questionService = $questionService; $this->questionService = $questionService;
}
public function index(Request $request)
{
$exercises = $this->exerciseService->getExercises($request->all());
if ($exercises->isEmpty()) {
return response()->json([
'status' => true,
'data' => $exercises,
'message' => 'Không có dữ liệu.',
]);
}
return response()->json([
'status' => true,
'data' => $exercises,
'message' => 'Lấy danh sách đề thi thành công.',
]);
} }
public function create(CreateExerciseRequest $request) public function create(CreateExerciseRequest $request)
@ -45,14 +63,14 @@ class ExerciseController extends Controller
return response()->json([ return response()->json([
'success' => true, 'success' => true,
'message' => 'Exercise created successfully', 'message' => 'Tạo đề thi thành công.',
'exercise_id' => $exerciseId 'exercise_id' => $exerciseId
], 201); ], 201);
} catch (\Exception $e) { } catch (\Exception $e) {
DB::rollBack(); DB::rollBack();
return response()->json([ return response()->json([
'success' => false, 'success' => false,
'message' => 'Failed to create exercise', 'message' => 'Tạo đề thi thất bại.',
'error' => $e->getMessage() 'error' => $e->getMessage()
], 500); ], 500);
} }

@ -6,6 +6,36 @@ use App\Models\Exercise;
class ExerciseService class ExerciseService
{ {
public function getExercises($params)
{
$limit = isset($params['limit']) ? min((int)$params['limit'], 100) : 10;
$offset = isset($params['offset']) ? max((int)$params['offset'], 0) : 0;
$lessonName = $params['search'] ?? null;
$query = Exercise::select('id', 'lesson_name', 'description', 'status', 'level', 'year', 'created_at');
if (!empty($lessonName)) {
$query->where('lesson_name', 'like', '%' . $lessonName . '%');
}
// Lấy dữ liệu chính
$data = $query->orderByDesc('created_at')
->skip($offset)
->take($limit)
->get()
->map(function ($item) {
$item->level = match ((int)$item->level) {
0 => 'easy',
1 => 'normal',
2 => 'hard',
default => 'unknown',
};
return $item;
});
return $data;
}
public function createExercise($dataExercise) public function createExercise($dataExercise)
{ {
$dataCreateExercise = [ $dataCreateExercise = [

9437
composer.lock generated

File diff suppressed because it is too large Load Diff

@ -13,5 +13,6 @@ Route::middleware(['auth:api', 'role:admin'])->get('/user', function (Request $r
}); });
Route::middleware('auth:api')->group(function () { Route::middleware('auth:api')->group(function () {
Route::get('/exercise', [ExerciseController::class, 'index'])->name('exercise.index');
Route::post('/exercise/create', [ExerciseController::class, 'create'])->name('exercise.create'); Route::post('/exercise/create', [ExerciseController::class, 'create'])->name('exercise.create');
}); });

Loading…
Cancel
Save