'boolean', ]; /** * Get setting value, decrypting if necessary */ public function getDecryptedValue(): string { if ($this->is_encrypted) { return decrypt($this->value); } return $this->value; } /** * Set setting value, encrypting if necessary */ public function setEncryptedValue(string $value): void { $this->value = $this->is_encrypted ? encrypt($value) : $value; } /** * Scope to get settings by provider */ public function scopeByProvider($query, string $provider) { return $query->where('provider', $provider); } /** * Get all settings for a provider as key-value array */ public static function getProviderSettings(string $provider): array { return static::byProvider($provider) ->get() ->mapWithKeys(function ($setting) { return [$setting->key => $setting->getDecryptedValue()]; }) ->toArray(); } /** * Set multiple settings for a provider */ public static function setProviderSettings(string $provider, array $settings): void { foreach ($settings as $key => $value) { static::updateOrCreate( ['provider' => $provider, 'key' => $key], ['value' => $value] ); } } /** * Get a specific setting value */ public static function getValue(string $provider, string $key, $default = null): ?string { $setting = static::where('provider', $provider) ->where('key', $key) ->first(); return $setting ? $setting->getDecryptedValue() : $default; } /** * Set a specific setting value */ public static function setValue(string $provider, string $key, string $value, bool $isEncrypted = false, ?string $description = null): void { static::updateOrCreate( ['provider' => $provider, 'key' => $key], [ 'value' => $isEncrypted ? encrypt($value) : $value, 'is_encrypted' => $isEncrypted, 'description' => $description, ] ); } }