*/ protected $fillable = [ 'workspace_id', 'email', 'role', 'token', 'invited_by', 'accepted_at', 'expires_at', ]; /** * Get the attributes that should be cast. * * @return array */ protected function casts(): array { return [ 'accepted_at' => 'datetime', 'expires_at' => 'datetime', ]; } /** * Boot the model. */ protected static function boot(): void { parent::boot(); static::creating(function (TeamInvitation $invitation) { if (empty($invitation->token)) { $invitation->token = Str::uuid()->toString(); } }); } /** * Get the workspace that owns the invitation. * * @return BelongsTo */ public function workspace(): BelongsTo { return $this->belongsTo(Workspace::class); } /** * Get the user who sent the invitation. * * @return BelongsTo */ public function invitedBy(): BelongsTo { return $this->belongsTo(User::class, 'invited_by'); } /** * Check if the invitation is valid (not accepted, not expired). */ public function isValid(): bool { if ($this->accepted_at !== null) { return false; } return $this->expires_at->isFuture(); } public function getActivitylogOptions(): LogOptions { return LogOptions::defaults() ->logFillable() ->logOnlyDirty() ->dontSubmitEmptyLogs(); } }