ConfigType::class, 'default_value' => 'json', 'is_sensitive' => 'boolean', ]; /** * Check if this key contains sensitive data that should be encrypted. */ public function isSensitive(): bool { return $this->is_sensitive ?? false; } /** * Parent key (for hierarchical grouping). */ public function parent(): BelongsTo { return $this->belongsTo(self::class, 'parent_id'); } /** * Child keys. */ public function children(): HasMany { return $this->hasMany(self::class, 'parent_id'); } /** * Values assigned to this key across profiles. */ public function values(): HasMany { return $this->hasMany(ConfigValue::class, 'key_id'); } /** * Get typed default value. */ public function getTypedDefault(): mixed { if ($this->default_value === null) { return $this->type->default(); } return $this->type->cast($this->default_value); } /** * Find key by code. */ public static function byCode(string $code): ?self { return static::where('code', $code)->first(); } /** * Get all keys for a category. * * @return Collection */ public static function forCategory(string $category): Collection { return static::where('category', $category)->get(); } }