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.
97 lines
2.9 KiB
97 lines
2.9 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);
|
|
}
|
|
}
|
|
|
|
public function detail($id)
|
|
{
|
|
$exercise = $this->exerciseService->detail($id);
|
|
|
|
if (empty($exercise)) {
|
|
return response()->json([
|
|
'status' => true,
|
|
'data' => $exercise,
|
|
'message' => 'Không có dữ liệu.',
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => true,
|
|
'data' => $exercise,
|
|
'message' => 'Lấy danh sách đề thi thành công.',
|
|
]);
|
|
}
|
|
}
|
|
|