25 lines
700 B
PHP
25 lines
700 B
PHP
<?php
|
|
|
|
namespace App\Domains\Purchase\Services;
|
|
|
|
use App\Domains\Purchase\Exceptions\PurchaseExpiredException;
|
|
use App\Domains\Purchase\Models\Purchase;
|
|
|
|
class PurchaseStateGuard
|
|
{
|
|
public function assertNotExpired(Purchase $purchase): void
|
|
{
|
|
$hasExpiredStatus = $purchase->status === Purchase::STATUS_EXPIRED;
|
|
$hasExpiredByTime = in_array($purchase->status, [
|
|
Purchase::STATUS_CREATED,
|
|
Purchase::STATUS_PENDING_PAYMENT,
|
|
], true)
|
|
&& $purchase->expires_at !== null
|
|
&& $purchase->expires_at->isPast();
|
|
|
|
if ($hasExpiredStatus || $hasExpiredByTime) {
|
|
throw new PurchaseExpiredException;
|
|
}
|
|
}
|
|
}
|