*/ use HasFactory; /** * The attributes that are mass assignable. * * @var list */ 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); } }