lthn.io/app/Core/Config/Events/ConfigChanged.php
Claude 41a90cbff8
feat: lthn.io API serving live chain data
Fixed: basePath self→static binding, namespace detection, event wiring,
SQLite cache, file cache driver. All Mod Boot classes converted to
$listens pattern for lifecycle event discovery.

Working endpoints:
- /v1/explorer/info — live chain height, difficulty, aliases
- /v1/explorer/stats — formatted chain statistics
- /v1/names/directory — alias directory grouped by type
- /v1/names/available/{name} — name availability check
- /v1/names/lookup/{name} — name details

Co-Authored-By: Charon <charon@lethean.io>
2026-04-03 17:17:42 +01:00

89 lines
2.2 KiB
PHP

<?php
/*
* Core PHP Framework
*
* Licensed under the European Union Public Licence (EUPL) v1.2.
* See LICENSE file for details.
*/
declare(strict_types=1);
namespace Core\Config\Events;
use Core\Config\Models\ConfigProfile;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
/**
* Fired when a config value is set or updated.
*
* This event is dispatched after `ConfigService::set()` is called,
* providing both the new value and the previous value for comparison.
*
* ## Event Properties
*
* - `keyCode` - The config key that changed (e.g., 'cdn.bunny.api_key')
* - `value` - The new value
* - `previousValue` - The previous value (null if key was not set before)
* - `profile` - The ConfigProfile where the value was set
* - `channelId` - The channel ID (null if not channel-specific)
*
* ## Listening to Config Changes
*
* ```php
* use Core\Config\Events\ConfigChanged;
*
* class MyModuleListener
* {
* public function handle(ConfigChanged $event): void
* {
* if ($event->keyCode === 'cdn.bunny.api_key') {
* // API key changed - refresh CDN client
* $this->cdnService->refreshClient();
* }
*
* // Check for prefix matches
* if (str_starts_with($event->keyCode, 'mymodule.')) {
* Cache::tags(['mymodule'])->flush();
* }
* }
* }
* ```
*
* ## In Module Boot.php
*
* ```php
* use Core\Config\Events\ConfigChanged;
*
* class Boot
* {
* public static array $listens = [
* ConfigChanged::class => 'onConfigChanged',
* ];
*
* public function onConfigChanged(ConfigChanged $event): void
* {
* // Handle config changes
* }
* }
* ```
*
* @see ConfigInvalidated For cache invalidation events
* @see ConfigLocked For when config values are locked
*/
class ConfigChanged
{
use Dispatchable;
use InteractsWithSockets;
use SerializesModels;
public function __construct(
public readonly string $keyCode,
public readonly mixed $value,
public readonly mixed $previousValue,
public readonly ConfigProfile $profile,
public readonly ?int $channelId = null,
) {}
}