exists()); $invite = self::create([ 'email' => $email, 'role' => $role, 'workspace_id' => $workspace->id, 'valid_until' => $validUntil ?? now()->addDays(7), 'token' => $token, ]); $invite->sendEmail(); return $invite; } public function getLink() { return front_url('/register?email=' . urlencode($this->email) . '&invite_token=' . urlencode($this->token)); } public function hasExpired() { return Carbon::parse($this->valid_until)->isPast(); } public function workspace() { return $this->belongsTo(Workspace::class); } public function markAsAccepted() { $this->update(['status' => self::ACCEPTED_STATUS]); WorkspaceUsersUpdated::dispatch($this->workspace); return $this; } public function sendEmail() { Mail::to($this->email)->send(new UserInvitationEmail($this)); } public function scopeNotExpired($query) { return $query->where('valid_until', '>', now()); } public function scopePending($query) { return $query->where('status', self::PENDING_STATUS); } }