This repository has been archived by the owner on Apr 7, 2024. It is now read-only.
/
FetchTransactionUpdateException.php
76 lines (63 loc) · 2.75 KB
/
FetchTransactionUpdateException.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
namespace GloCurrency\AccessBank\Exceptions;
use GloCurrency\AccessBank\Models\Transaction;
use GloCurrency\AccessBank\Enums\TransactionStateCodeEnum;
use BrokeYourBike\AccessBank\Models\TransactionResponse;
use BrokeYourBike\AccessBank\Enums\StatusCodeEnum;
use BrokeYourBike\AccessBank\Enums\ErrorCodeEnum;
use BrokeYourBike\AccessBank\Client;
final class FetchTransactionUpdateException extends \RuntimeException
{
private TransactionStateCodeEnum $stateCode;
private string $stateCodeReason;
public function __construct(TransactionStateCodeEnum $stateCode, string $stateCodeReason, ?\Throwable $previous = null)
{
$this->stateCode = $stateCode;
$this->stateCodeReason = $stateCodeReason;
parent::__construct($stateCodeReason, 0, $previous);
}
public function getStateCode(): TransactionStateCodeEnum
{
return $this->stateCode;
}
public function getStateCodeReason(): string
{
return $this->stateCodeReason;
}
public static function stateNotAllowed(Transaction $transaction): self
{
$className = $transaction::class;
$message = "{$className} state_code `{$transaction->getStateCode()->value}` not allowed";
return new static(TransactionStateCodeEnum::STATE_NOT_ALLOWED, $message);
}
public static function apiRequestException(\Throwable $e): self
{
$className = Client::class;
$message = "Exception during {$className} request with message: `{$e->getMessage()}`";
return new static(TransactionStateCodeEnum::API_REQUEST_EXCEPTION, $message);
}
public static function noErrorCode(TransactionResponse $response): self
{
$className = $response::class;
$message = "{$className} do not have `error_code` property: `{$response->getRawResponse()->getBody()}`";
return new static(TransactionStateCodeEnum::NO_ERROR_CODE_PROPERTY, $message);
}
public static function unexpectedErrorCode(string $code): self
{
$className = ErrorCodeEnum::class;
$message = "Unexpected {$className}: `{$code}`";
return new static(TransactionStateCodeEnum::UNEXPECTED_ERROR_CODE, $message);
}
public static function noStatusCode(TransactionResponse $response): self
{
$className = $response::class;
$message = "{$className} do not have `payment.status` property: `{$response->getRawResponse()->getBody()}`";
return new static(TransactionStateCodeEnum::NO_STATUS_CODE_PROPERTY, $message);
}
public static function unexpectedStatusCode(string $code): self
{
$className = StatusCodeEnum::class;
$message = "Unexpected {$className}: `{$code}`";
return new static(TransactionStateCodeEnum::UNEXPECTED_STATUS_CODE, $message);
}
}