58 lines
2.0 KiB
PHP
58 lines
2.0 KiB
PHP
<?php
|
||
|
||
namespace App\Models;
|
||
|
||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||
use Laravel\Sanctum\HasApiTokens;
|
||
use Illuminate\Database\Eloquent\Model;
|
||
use Spatie\Permission\Traits\HasRoles; // Использование правильного трейта для работы с токенами
|
||
|
||
class User extends Authenticatable
|
||
{
|
||
use HasApiTokens, HasFactory, HasRoles;
|
||
|
||
protected $fillable = ['name', 'email', 'password','doctor_id','role_type'];
|
||
public function patients()
|
||
{
|
||
return $this->hasMany(User::class, 'doctor_id');
|
||
}
|
||
|
||
// Связь с доктором (если это пациент)
|
||
public function doctor()
|
||
{
|
||
return $this->belongsTo(User::class, 'doctor_id');
|
||
}
|
||
// Связь с курсами
|
||
public function courses()
|
||
{
|
||
return $this->belongsToMany(Course::class)->withTimestamps();
|
||
}
|
||
|
||
// Связь с упражнениями, с учетом их выполнения
|
||
public function exercises()
|
||
{
|
||
return $this->belongsToMany(Exercise::class, 'exercise_user')->withPivot('completed');
|
||
}
|
||
|
||
// Метод для проверки, завершены ли все упражнения
|
||
public function isCompleted($userId)
|
||
{
|
||
// Получаем все упражнения, связанные с курсом
|
||
$exercises = $this->exercises;
|
||
|
||
// Проверяем, завершены ли все упражнения для данного пациента
|
||
foreach ($exercises as $exercise) {
|
||
// Проверка завершенности каждого упражнения
|
||
$completed = $exercise->users()->wherePivot('user_id', $userId)->wherePivot('completed', true)->exists();
|
||
|
||
if (!$completed) {
|
||
return false; // Если хотя бы одно упражнение не завершено
|
||
}
|
||
}
|
||
|
||
return true; // Все упражнения завершены
|
||
}
|
||
|
||
}
|