102 lines
3.6 KiB
PHP
102 lines
3.6 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use App\Models\Course;
|
||
use App\Models\User;
|
||
use App\Models\Exercise;
|
||
use Illuminate\Http\Request;
|
||
|
||
class CourseController extends Controller
|
||
{
|
||
/**
|
||
* Получить список курсов с упражнениями.
|
||
*/
|
||
public function index()
|
||
{
|
||
return response()->json(Course::with('exercises')->get());
|
||
}
|
||
|
||
/**
|
||
* Создать новый курс и привязать к нему упражнения.
|
||
*/
|
||
public function store(Request $request)
|
||
{
|
||
$validated = $request->validate([
|
||
'title' => 'required|string|max:255',
|
||
'description' => 'nullable|string',
|
||
'exercise_ids' => 'nullable|array',
|
||
'exercise_ids.*' => 'exists:exercises,id',
|
||
]);
|
||
|
||
// Создание курса
|
||
$course = Course::create([
|
||
'title' => $validated['title'],
|
||
'description' => $validated['description'] ?? null,
|
||
]);
|
||
|
||
// Привязка упражнений
|
||
if (!empty($validated['exercise_ids'])) {
|
||
$course->exercises()->attach($validated['exercise_ids']);
|
||
}
|
||
|
||
return response()->json($course->load('exercises'), 201);
|
||
}
|
||
public function assignCourseToPatient(Request $request)
|
||
{
|
||
// Валидируем данные запроса
|
||
$validated = $request->validate([
|
||
'patient_id' => 'required|exists:users,id', // ID пациента
|
||
'course_id' => 'required|exists:courses,id', // ID курса
|
||
]);
|
||
|
||
$patient = User::findOrFail($validated['patient_id']);
|
||
$course = Course::findOrFail($validated['course_id']);
|
||
|
||
// Проверяем, является ли текущий пользователь доктором
|
||
$doctor = auth()->user();
|
||
if (!$doctor->hasRole('doctor')) {
|
||
return response()->json(['error' => 'You are not authorized to assign courses'], 403);
|
||
}
|
||
|
||
// Назначаем курс пациенту
|
||
$patient->courses()->attach($course);
|
||
|
||
// Добавляем упражнения из курса пациенту
|
||
foreach ($course->exercises as $exercise) {
|
||
// Для каждого упражнения пациента добавляем его в таблицу связи с выполнением
|
||
$patient->exercises()->attach($exercise, ['completed' => false]);
|
||
}
|
||
|
||
return response()->json(['message' => 'Course and exercises assigned successfully']);
|
||
}
|
||
|
||
/**
|
||
* Добавить упражнение в существующий курс.
|
||
*/
|
||
public function addExercise(Request $request, Course $course)
|
||
{
|
||
$request->validate([
|
||
'exercise_id' => 'required|exists:exercises,id',
|
||
]);
|
||
|
||
$course->exercises()->attach($request->exercise_id);
|
||
|
||
return response()->json(['message' => 'Exercise added to course']);
|
||
}
|
||
public function viewCourses(Request $request)
|
||
{
|
||
// Получаем текущего авторизованного пользователя (пациента)
|
||
$patient = auth()->user();
|
||
|
||
// Проверяем, что у пользователя есть роль "patient"
|
||
if ($patient->hasRole('patient')) {
|
||
// Получаем все курсы, назначенные этому пациенту
|
||
$courses = $patient->courses;
|
||
|
||
return response()->json($courses);
|
||
}
|
||
|
||
return response()->json(['message' => 'Unauthorized'], 403); // Возвращаем ошибку, если не пациент
|
||
}
|
||
} |