app/Models/Team.php
Rama main · réplica de lectura del repositorio original.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Team extends Model
{
/** @use HasFactory<\Database\Factories\TeamFactory> */
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'name',
'description',
'owner_id',
];
/**
* Get the team owner
*/
public function owner(): BelongsTo
{
return $this->belongsTo(User::class, 'owner_id');
}
/**
* Get all users that belong to the team
*/
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class)
->withPivot('role')
->withTimestamps();
}
/**
* Get team members with 'member' role
*/
public function members(): BelongsToMany
{
return $this->users()->wherePivot('role', 'member');
}
/**
* Get team members with 'admin' role
*/
public function admins(): BelongsToMany
{
return $this->users()->wherePivot('role', 'admin');
}
/**
* Check if the given user is the team owner
*/
public function isOwner(User $user): bool
{
return $this->owner_id === $user->id;
}
/**
* Check if the given user belongs to the team
*/
public function hasUser(User $user): bool
{
return $this->users()->where('user_id', $user->id)->exists();
}
/**
* Get the role of the given user in the team
*/
public function userRole(User $user): ?string
{
$pivot = $this->users()->where('user_id', $user->id)->first()?->pivot;
return $pivot?->role;
}
/**
* Get all monitors for the team
*/
public function monitors(): HasMany
{
return $this->hasMany(Monitor::class);
}
/**
* Get all projects for the team
*/
public function projects(): HasMany
{
return $this->hasMany(Project::class);
}
/**
* Get status pages for the team
*/
public function statusPages(): HasMany
{
return $this->hasMany(StatusPage::class);
}
}