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);
}
}