HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/ai.naniguide.com/app/Jobs/PopulateAbTestAssignments.php
<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Model\AbTest;

/**
 * Assign eligible subscribers to A/B test variants.
 *
 * Safe to re-run: skips already-assigned subscribers, so calling this again
 * after new subscribers are added will assign only the newcomers while
 * preserving the existing split ratio.
 *
 * The split algorithm is injected via AssignmentStrategy — swap to
 * HashSplitStrategy for approximate (CRC32-based) assignment if needed.
 */
class PopulateAbTestAssignments implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $timeout = 600;
    public $tries   = 1;

    public function __construct(protected int $abTestId) {}

    public function handle(): void
    {
        $abTest   = AbTest::with('variants', 'campaign')->findOrFail($this->abTestId);
        $campaign = $abTest->campaign;

        $listIds = $campaign->listsSegments->pluck('mail_list_id')->unique()->toArray();

        if (empty($listIds)) {
            return;
        }

        $abTest->resolveStrategy()->assign($abTest, $listIds, $campaign->id);
    }
}