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.
60 lines
1.9 KiB
60 lines
1.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\QuestionGroupService;
|
|
use App\Services\QuestionService;
|
|
use App\Services\SkillService;
|
|
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 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' => 'Exercise created successfully',
|
|
'exercise_id' => $exerciseId
|
|
], 201);
|
|
} catch (\Exception $e) {
|
|
DB::rollBack();
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Failed to create exercise',
|
|
'error' => $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
}
|
|
|