File: /home/xedaptot/hi.naniguide.com/app/Models/WorkspaceInvitation.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Str;
class WorkspaceInvitation extends Model
{
use HasFactory;
protected $fillable = [
'workspace_id',
'email',
'workspace_role_id',
'token',
'invited_by',
'expires_at',
'accepted_at',
];
protected function casts(): array
{
return [
'expires_at' => 'datetime',
'accepted_at' => 'datetime',
];
}
protected static function booted(): void
{
static::creating(function (WorkspaceInvitation $invitation) {
if (empty($invitation->token)) {
$invitation->token = Str::random(64);
}
});
}
// ── Relationships ──────────────────────────────────────────────
public function workspace(): BelongsTo
{
return $this->belongsTo(Workspace::class);
}
public function role(): BelongsTo
{
return $this->belongsTo(WorkspaceRole::class, 'workspace_role_id');
}
public function inviter(): BelongsTo
{
return $this->belongsTo(WorkspaceMember::class, 'invited_by');
}
// ── Helpers ────────────────────────────────────────────────────
public function isExpired(): bool
{
return $this->expires_at->isPast();
}
public function isAccepted(): bool
{
return $this->accepted_at !== null;
}
public function isPending(): bool
{
return !$this->isAccepted() && !$this->isExpired();
}
}