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/Dto/WarmupStrategyData.php
<?php

namespace App\Dto;

use App\Model\WarmupStrategy;

class WarmupStrategyData
{
    public function __construct(
        public string $name,
        public string $description,
        public string $preset,
        public string $growthStrategy,
        public int $startingVolume,
        public string $quotaType,
        public int $dailyIncrement,
        public ?float $exponentialFactor,
        public string $limitType,
        public ?int $limitPerDayCap,
        public ?int $limitTargetVolume,
        public ?int $limitStopAfterDays,
        public bool $sendOnWeekends,
        public bool $enableSafetyChecks,
        public bool $pauseOnNegativeSignals,
        public float $maxBounceRate,
        public float $maxComplaintRate,
        public string $status,
    ) {
    }

    public static function fromRequest(\Illuminate\Http\Request $request): self
    {
        return self::fromArray($request->all());
    }

    public static function fromArray(array $attributes): self
    {
        return new self(
            name: (string) ($attributes['name'] ?? ''),
            description: (string) ($attributes['description'] ?? ''),
            preset: (string) ($attributes['preset'] ?? WarmupStrategy::PRESET_BALANCED),
            growthStrategy: (string) ($attributes['growth_strategy'] ?? WarmupStrategy::GROWTH_STRATEGY_LINEAR),
            startingVolume: (int) ($attributes['starting_volume'] ?? 0),
            quotaType: (string) ($attributes['quota_type'] ?? WarmupStrategy::QUOTA_TYPE_DAILY),
            dailyIncrement: (int) ($attributes['daily_increment'] ?? 0),
            exponentialFactor: isset($attributes['exponential_factor']) && $attributes['exponential_factor'] !== '' ? (float) $attributes['exponential_factor'] : null,
            limitType: (string) ($attributes['limit_type'] ?? WarmupStrategy::LIMIT_TYPE_PER_DAY_CAP),
            limitPerDayCap: isset($attributes['limit_per_day_cap']) && $attributes['limit_per_day_cap'] !== '' ? (int) $attributes['limit_per_day_cap'] : null,
            limitTargetVolume: isset($attributes['limit_target_volume']) && $attributes['limit_target_volume'] !== '' ? (int) $attributes['limit_target_volume'] : null,
            limitStopAfterDays: isset($attributes['limit_stop_after_days']) && $attributes['limit_stop_after_days'] !== '' ? (int) $attributes['limit_stop_after_days'] : null,
            sendOnWeekends: self::toBool($attributes['send_on_weekends'] ?? false),
            enableSafetyChecks: self::toBool($attributes['enable_safety_checks'] ?? true),
            pauseOnNegativeSignals: self::toBool($attributes['pause_on_negative_signals'] ?? true),
            maxBounceRate: (float) ($attributes['max_bounce_rate'] ?? WarmupStrategy::DEFAULT_MAX_BOUNCE_RATE),
            maxComplaintRate: (float) ($attributes['max_complaint_rate'] ?? WarmupStrategy::DEFAULT_MAX_COMPLAINT_RATE),
            status: (string) ($attributes['status'] ?? WarmupStrategy::STATUS_ACTIVE),
        );
    }

    public function toArray(): array
    {
        return [
            'name' => $this->name,
            'description' => $this->description,
            'preset' => $this->preset,
            'growth_strategy' => $this->growthStrategy,
            'starting_volume' => $this->startingVolume,
            'quota_type' => $this->quotaType,
            'daily_increment' => $this->dailyIncrement,
            'exponential_factor' => $this->exponentialFactor,
            'limit_type' => $this->limitType,
            'limit_per_day_cap' => $this->limitPerDayCap,
            'limit_target_volume' => $this->limitTargetVolume,
            'limit_stop_after_days' => $this->limitStopAfterDays,
            'send_on_weekends' => $this->sendOnWeekends,
            'enable_safety_checks' => $this->enableSafetyChecks,
            'pause_on_negative_signals' => $this->pauseOnNegativeSignals,
            'max_bounce_rate' => $this->maxBounceRate,
            'max_complaint_rate' => $this->maxComplaintRate,
            'status' => $this->status,
        ];
    }

    private static function toBool(mixed $value): bool
    {
        if (is_bool($value)) {
            return $value;
        }

        return in_array((string) $value, ['1', 'true', 'yes', 'on'], true);
    }
}