'encrypted', 'connected_at' => 'datetime', 'last_sync_attempt_at' => 'datetime', 'last_successful_sync_at' => 'datetime', ]; } public function connectedBy(): BelongsTo { return $this->belongsTo(User::class, 'connected_by_user_id'); } public static function current(): ?self { return self::query()->latest('id')->first(); } public function hasRefreshToken(): bool { return filled($this->encrypted_refresh_token); } public function isConnected(): bool { return $this->status === self::STATUS_CONNECTED && $this->hasRefreshToken(); } public function needsReconnect(): bool { return $this->status === self::STATUS_RECONNECT_REQUIRED || ( in_array($this->status, [self::STATUS_PENDING, self::STATUS_CONNECTED, self::STATUS_ERROR], true) && ! $this->hasRefreshToken() ); } public function isDisconnected(): bool { return $this->status === self::STATUS_DISCONNECTED || ! $this->hasRefreshToken(); } }