GuestDeclarationDraftStatus.php 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace common\helpers;
  3. final class GuestDeclarationDraftStatus
  4. {
  5. const DRAFT = 'draft';
  6. const PENDING_PAYMENT = 'pending_payment';
  7. const PROCESSING = 'processing';
  8. const COMPLETED = 'completed';
  9. const PAYMENT_FAILED = 'payment_failed';
  10. const PAYMENT_INITIALIZING = 'payment_initializing';
  11. const EXPIRED = 'expired';
  12. const MANUAL_REVIEW = 'manual_review';
  13. private const TRANSITIONS = [
  14. self::DRAFT => [self::PAYMENT_INITIALIZING, self::EXPIRED],
  15. self::PENDING_PAYMENT => [self::PROCESSING, self::PAYMENT_FAILED, self::EXPIRED, self::MANUAL_REVIEW],
  16. self::PAYMENT_INITIALIZING => [self::DRAFT, self::PENDING_PAYMENT, self::MANUAL_REVIEW],
  17. self::PROCESSING => [self::COMPLETED, self::MANUAL_REVIEW],
  18. self::PAYMENT_FAILED => [self::PAYMENT_INITIALIZING, self::EXPIRED],
  19. self::COMPLETED => [],
  20. self::EXPIRED => [],
  21. self::MANUAL_REVIEW => [],
  22. ];
  23. public static function all(): array
  24. {
  25. return array_keys(self::TRANSITIONS);
  26. }
  27. public static function canTransition(string $from, string $to): bool
  28. {
  29. return in_array($to, self::TRANSITIONS[$from] ?? [], true);
  30. }
  31. public static function isExpired(?int $expiresAt, ?int $now = null): bool
  32. {
  33. return $expiresAt !== null && $expiresAt <= ($now ?? time());
  34. }
  35. }