* @copyright 2025-2026 Vateron Media * @link https://github.com/Vateron-Media/XC_VM * @license AGPL-3.0 https://www.gnu.org/licenses/agpl-3.0.html */ class DomainDatabaseWiring { /** * Wire the injected $db instance into every domain service class. * * @param object $db DatabaseHandler instance. * @return void */ public static function wire(object $db): void { // Every domain service that uses the static setDb()/db() pattern, kept as a // single flat list so the wiring cannot drift between bootstrap paths. // // Each entry is guarded by class_exists() below: the LB build strips whole // MAIN-only domains (Domain/User, Domain/Device, Domain/Auth, …), so those // classes are simply absent on load-balancer nodes. Wiring must skip a // missing class instead of fataling during boot — a load-balancer only // needs the streaming/server slice and never touches the MAIN-only ones. $services = [ // Bouquet BouquetService::class, // Device (MAIN-only — absent on LB) EnigmaService::class, MagService::class, // Epg EPG::class, EpgService::class, // Line LineRepository::class, LineService::class, PackageService::class, // Security BlocklistService::class, // Server ServerRepository::class, ServerService::class, SettingsService::class, // Stream CategoryService::class, ChannelService::class, ConnectionTracker::class, PlaylistGenerator::class, ProfileService::class, ProviderService::class, RadioService::class, StreamConfigRepository::class, StreamProcess::class, StreamRepository::class, StreamService::class, // User (MAIN-only — absent on LB) GroupService::class, ResellerAPI::class, TicketRepository::class, UserRepository::class, UserService::class, // Vod EpisodeService::class, MovieService::class, SeriesService::class, TMDbService::class, ]; foreach ($services as $service) { if (class_exists($service)) { $service::setDb($db); } } } }