feat: 更新玩法配置管理,简化字段并增强功能
- 将玩法相关的显示名称字段统一为 `display_name`,移除多语言字段。 - 在 `PlayTypePatchController` 中新增即时切换玩法开关的功能,并推送大厅更新。 - 优化多个控制器和服务中的权限检查与数据处理逻辑,提升代码可读性与维护性。
This commit is contained in:
@@ -30,6 +30,19 @@ final class DrawHallSnapshotBuilder
|
||||
public function effectiveHallDisplayStatus(Draw $target, Carbon $nowUtc): string
|
||||
{
|
||||
$db = (string) $target->status;
|
||||
|
||||
if ($db === DrawStatus::Pending->value) {
|
||||
$startUtc = $target->start_time;
|
||||
if ($startUtc instanceof Carbon && $startUtc <= $nowUtc) {
|
||||
$closeUtc = $target->close_time;
|
||||
if ($closeUtc === null || $closeUtc > $nowUtc) {
|
||||
$db = DrawStatus::Open->value;
|
||||
}
|
||||
} else {
|
||||
return $db;
|
||||
}
|
||||
}
|
||||
|
||||
if ($db !== DrawStatus::Open->value) {
|
||||
return $db;
|
||||
}
|
||||
@@ -62,7 +75,14 @@ final class DrawHallSnapshotBuilder
|
||||
$nowUtc = ($nowUtc ?? Carbon::now())->utc();
|
||||
|
||||
$bettingOpen = Draw::query()
|
||||
->where('status', DrawStatus::Open->value)
|
||||
->where(function ($q) use ($nowUtc): void {
|
||||
$q->where('status', DrawStatus::Open->value)
|
||||
->orWhere(function ($q2) use ($nowUtc): void {
|
||||
$q2->where('status', DrawStatus::Pending->value)
|
||||
->whereNotNull('start_time')
|
||||
->where('start_time', '<=', $nowUtc);
|
||||
});
|
||||
})
|
||||
->where(function ($q) use ($nowUtc): void {
|
||||
$q->whereNull('close_time')
|
||||
->orWhere('close_time', '>', $nowUtc);
|
||||
@@ -70,6 +90,10 @@ final class DrawHallSnapshotBuilder
|
||||
->orderBy('draw_time')
|
||||
->first();
|
||||
|
||||
if ($bettingOpen !== null) {
|
||||
return $bettingOpen;
|
||||
}
|
||||
|
||||
$chronological = Draw::query()
|
||||
->whereNotIn('status', [
|
||||
DrawStatus::Settled->value,
|
||||
@@ -78,7 +102,29 @@ final class DrawHallSnapshotBuilder
|
||||
->orderBy('draw_time')
|
||||
->first();
|
||||
|
||||
return $bettingOpen ?? $chronological;
|
||||
if ($chronological !== null && $this->isCooldownExpired($chronological, $nowUtc)) {
|
||||
$next = Draw::query()
|
||||
->whereNotIn('status', [
|
||||
DrawStatus::Settled->value,
|
||||
DrawStatus::Cancelled->value,
|
||||
])
|
||||
->where('draw_time', '>', $chronological->draw_time)
|
||||
->orderBy('draw_time')
|
||||
->first();
|
||||
|
||||
if ($next !== null) {
|
||||
return $next;
|
||||
}
|
||||
}
|
||||
|
||||
return $chronological;
|
||||
}
|
||||
|
||||
private function isCooldownExpired(Draw $draw, Carbon $nowUtc): bool
|
||||
{
|
||||
return (string) $draw->status === DrawStatus::Cooldown->value
|
||||
&& $draw->cooling_end_time instanceof Carbon
|
||||
&& $draw->cooling_end_time <= $nowUtc;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user