You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

78 lines
2.4 KiB

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\CreateExerciseRequest;
use App\Services\ExerciseService;
use App\Services\ExerciseSkillService;
use App\Services\QuestionService;
use App\Services\SkillService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class ExerciseController extends Controller
{
public function __construct(
ExerciseService $exerciseService,
ExerciseSkillService $exerciseSkillService,
SkillService $skillService,
QuestionService $questionService,
)
{
$this->exerciseService = $exerciseService;
$this->skillService = $skillService;
$this->exerciseSkillService = $exerciseSkillService;
$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)
{
DB::beginTransaction();
try {
$data = $request->all();
$groups = json_decode($data['groups']);
$dataExercises = $request->except('groups','skill');
$dataSkills = $data['skill'];
$exerciseId = $this->exerciseService->createExercise($dataExercises);
$skillIds = $this->skillService->getSkillIds($dataSkills);
$this->exerciseSkillService->handleSkillsForExercise($skillIds, $exerciseId);
$this->questionService->createQuestion($groups, $exerciseId);
DB::commit();
return response()->json([
'success' => true,
'message' => 'Tạo đề thi thành công.',
'exercise_id' => $exerciseId
], 201);
} catch (\Exception $e) {
DB::rollBack();
return response()->json([
'success' => false,
'message' => 'Tạo đề thi thất bại.',
'error' => $e->getMessage()
], 500);
}
}
}