File: /home/xedaptot/ai.naniguide.com/app/Services/Ads/AdapterSession.php
<?php
namespace App\Services\Ads;
use App\Model\AdPlatform;
/**
* Binds an `AdPlatform` record to a decorator-wrapped adapter chain.
*
* Services should NOT call `AdPlatformManager::adapter($platform)` directly —
* that returns a bare adapter without access to the AdPlatform record, which
* means TokenRefreshDecorator can't update the DB, TelemetryDecorator can't tag
* logs with customer_id, etc.
*
* Instead call `AdPlatformManager::session($platform)` which returns this
* AdapterSession with both the record AND the chain in scope.
*
* Usage:
* $session = $manager->session($adPlatform);
* $result = $session->chain->publishCampaign(
* accessToken: $session->platform->access_token,
* ...
* );
*/
final class AdapterSession
{
public function __construct(
public readonly AdPlatform $platform,
public readonly AdPlatformAdapter $chain,
) {}
}