64 lines
2.0 KiB
PHP
64 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Exercise;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\User;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class ExerciseController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
return response()->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']);
|
|
}
|
|
}
|
|
|