49 lines
1.4 KiB
PHP
49 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Jackpot;
|
|
|
|
use App\Models\Draw;
|
|
use App\Models\JackpotPool;
|
|
use App\Support\CurrencyFormatter;
|
|
use App\Lottery\DrawStatus;
|
|
|
|
final class JackpotSummaryService
|
|
{
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function summary(string $currencyCode): array
|
|
{
|
|
$currency = strtoupper(trim($currencyCode));
|
|
if ($currency === '' || strlen($currency) > 16) {
|
|
$currency = 'NPR';
|
|
}
|
|
|
|
$pool = JackpotPool::query()
|
|
->where('currency_code', $currency)
|
|
->where('status', 1)
|
|
->first();
|
|
|
|
$amountMinor = $pool !== null ? (int) $pool->current_amount : 0;
|
|
|
|
return [
|
|
'currency_code' => $currency,
|
|
'enabled' => $pool !== null,
|
|
'current_amount_minor' => $amountMinor,
|
|
'current_amount_formatted' => CurrencyFormatter::fromMinor($amountMinor),
|
|
'draws_since_last_burst' => $pool !== null ? $this->drawsSinceLastBurst($pool) : null,
|
|
'last_trigger_draw_id' => $pool?->last_trigger_draw_id !== null ? (int) $pool->last_trigger_draw_id : null,
|
|
];
|
|
}
|
|
|
|
private function drawsSinceLastBurst(JackpotPool $pool): int
|
|
{
|
|
$lastId = (int) ($pool->last_trigger_draw_id ?? 0);
|
|
|
|
return (int) Draw::query()
|
|
->where('status', DrawStatus::Settled->value)
|
|
->when($lastId > 0, fn ($q) => $q->where('id', '>', $lastId))
|
|
->count();
|
|
}
|
|
}
|