json(Exercise::all()); } public function store(Request $request) { $request->validate([ 'title' => 'required|string', 'description' => 'nullable|string', 'gif' => 'required|file|mimes:gif|max:2048', // Ограничение: только GIF, макс 2MB ]); $path = $request->file('gif')->store('public/exercises'); $exercise = Exercise::create([ 'title' => $request->title, 'description' => $request->description, 'gif_path' => str_replace('public/', '', $path), // Сохраняем путь ]); return response()->json([ 'exercise' => $exercise, 'gif_url' => Storage::url($exercise->gif_path), ], 201); } public function completeExercise(Request $request) { $validated = $request->validate([ 'exercise_id' => 'required|exists:exercises,id', 'user_id' => 'required|exists:users,id', ]); $userId = $validated['user_id']; // Находим упражнение и пациента по ID $exercise = Exercise::find($validated['exercise_id']); $user = User::find($validated['user_id']); // Обновляем статус выполнения упражнения для пациента $user->exercises()->updateExistingPivot($exercise->id, ['completed' => true]); // Если все упражнения курса завершены, завершаем курс foreach ($exercise->courses as $course) { if ($course->isCompleted($userId)) { $course->update(['completed' => true]); // Завершаем курс } } return response()->json(['message' => 'Exercise completed successfully']); } }