api destroy exercise

feature/api-destroy-exercise
hieunv 2 months ago
parent 878612db1f
commit a318bfa8cd
  1. 30
      app/Http/Controllers/Api/ExerciseController.php
  2. 45
      app/Services/ExerciseService.php
  3. 3
      app/Services/ExerciseSkillService.php
  4. 1
      routes/api.php

@ -10,6 +10,7 @@ use App\Services\QuestionService;
use App\Services\SkillService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Symfony\Component\HttpFoundation\Response;
class ExerciseController extends Controller
{
@ -35,14 +36,14 @@ class ExerciseController extends Controller
'status' => true,
'data' => $exercises,
'message' => 'Không có dữ liệu.',
]);
], Response::HTTP_NOT_FOUND);
}
return response()->json([
'status' => true,
'data' => $exercises,
'message' => 'Lấy danh sách đề thi thành công.',
]);
], Response::HTTP_OK);
}
public function create(CreateExerciseRequest $request)
@ -65,14 +66,14 @@ class ExerciseController extends Controller
'success' => true,
'message' => 'Tạo đề thi thành công.',
'exercise_id' => $exerciseId
], 201);
], Response::HTTP_OK);
} catch (\Exception $e) {
DB::rollBack();
return response()->json([
'success' => false,
'message' => 'Tạo đề thi thất bại.',
'error' => $e->getMessage()
], 500);
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
@ -85,13 +86,30 @@ class ExerciseController extends Controller
'status' => true,
'data' => $exercise,
'message' => 'Không có dữ liệu.',
]);
], Response::HTTP_NOT_FOUND);
}
return response()->json([
'status' => true,
'data' => $exercise,
'message' => 'Lấy danh sách đề thi thành công.',
]);
], Response::HTTP_OK);
}
public function destroy($id)
{
$result = $this->exerciseService->destroy($id);
if (!$result['status']) {
return response()->json([
'status' => false,
'message' => $result['message'],
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
return response()->json([
'status' => true,
'message' => $result['message'],
], Response::HTTP_OK);
}
}

@ -4,6 +4,13 @@ namespace App\Services;
use App\Http\Resources\ExerciseResource;
use App\Models\Exercise;
use App\Models\ExerciseSkill;
use App\Models\Question;
use App\Models\QuestionBlank;
use App\Models\QuestionChoice;
use App\Models\QuestionGroup;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\DB;
class ExerciseService
{
@ -71,4 +78,42 @@ class ExerciseService
return new ExerciseResource($exercise);
}
public function destroy($id)
{
try {
$exercise = Exercise::findOrFail($id);
DB::transaction(function () use ($exercise) {
$groupIds = $exercise->questionGroups()->pluck('id');
$questionIds = DB::table('se_questions')
->whereIn('group_id', $groupIds)
->pluck('id');
QuestionChoice::whereIn('question_id', $questionIds)->delete();
QuestionBlank::whereIn('question_id', $questionIds)->delete();
Question::whereIn('id', $questionIds)->delete();
QuestionGroup::whereIn('id', $groupIds)->delete();
ExerciseSkill::where('exercise_id', $exercise->id)->delete();
$exercise->delete();
});
return [
'status' => true,
'message' => 'Xoá đề thi thành công.'
];
} catch (ModelNotFoundException $e) {
return [
'status' => false,
'message' => 'Không tìm thấy đề thi.'
];
} catch (\Exception $e) {
return [
'status' => false,
'message' => 'Lỗi hệ thống: ' . $e->getMessage()
];
}
}
}

@ -15,11 +15,14 @@ class ExerciseSkillService
*/
public function handleSkillsForExercise($skillIds, $exerciseId)
{
$now = now();
$data = [];
foreach ($skillIds as $skillId) {
$data[] = [
'exercise_id' => $exerciseId,
'skill_id' => $skillId,
'created_at' => $now,
'updated_at' => $now,
];
}

@ -16,4 +16,5 @@ Route::middleware('auth:api')->group(function () {
Route::get('/exercises', [ExerciseController::class, 'index'])->name('exercise.index');
Route::post('/exercise/create', [ExerciseController::class, 'create'])->name('exercise.create');
Route::get('/exercise/{id}', [ExerciseController::class, 'detail'])->name('exercise.detail');
Route::delete('/exercise/{id}', [ExerciseController::class, 'destroy']);
});

Loading…
Cancel
Save