Passed
Push — master ( cbdbb3...bd81e8 )
by Jhao
01:58
created

Services::getBalance()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
1
<?php
2
3
/**
4
 * This file is part of RussianPost SDK package.
5
 *
6
 * © Appwilio (http://appwilio.com), JhaoDa (https://github.com/jhaoda)
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace Appwilio\RussianPostSDK\Dispatching\Endpoints\Services;
15
16
use Appwilio\RussianPostSDK\Dispatching\Http\ArrayOf;
17
use Appwilio\RussianPostSDK\Dispatching\Http\ApiClient;
18
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Entities\Balance;
19
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Entities\Calculation;
20
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Entities\CheckedRecipient;
21
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Entities\NormalizedFio;
22
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Entities\NormalizedPhone;
23
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Entities\NormalizedAddress;
24
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\CalculationRequest;
25
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\NormalizeFioRequest;
26
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\NormalizePhoneRequest;
27
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\CheckRecipientRequest;
28
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Exceptions\CalculationException;
29
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Services\Requests\NormalizeAddressRequest;
30
31
final class Services
32
{
33
    /** @var ApiClient */
34
    private $client;
35
36 6
    public function __construct(ApiClient $client)
37
    {
38 6
        $this->client = $client;
39 6
    }
40
41
    /**
42
     * Нормализация телефона(ов).
43
     *
44
     * @link https://otpravka.pochta.ru/specification#/nogroup-normalization_phone
45
     *
46
     * @param  NormalizePhoneRequest  $request
47
     *
48
     * @return iterable|NormalizedPhone[]
49
     */
50 1
    public function normalizePhone(NormalizePhoneRequest $request): iterable
51
    {
52 1
        return $this->client->post('/1.0/clean/phone', $request, new ArrayOf(NormalizedPhone::class));
53
    }
54
55
    /**
56
     * Нормализация ФИО.
57
     *
58
     * @link https://otpravka.pochta.ru/specification#/nogroup-normalization_fio
59
     *
60
     * @param  NormalizeFioRequest  $request
61
     *
62
     * @return iterable|NormalizedFio[]
63
     */
64 1
    public function normalizeFio(NormalizeFioRequest $request): iterable
65
    {
66 1
        return $this->client->post('/1.0/clean/physical', $request, new ArrayOf(NormalizedFio::class));
67
    }
68
69
    /**
70
     * Нормализация адреса(ов).
71
     *
72
     * @link https://otpravka.pochta.ru/specification#/nogroup-normalization_adress
73
     *
74
     * @param  NormalizeAddressRequest  $request
75
     *
76
     * @return iterable|NormalizedAddress[]
77
     */
78 1
    public function normalizeAddress(NormalizeAddressRequest $request): iterable
79
    {
80 1
        return $this->client->post('/1.0/clean/address', $request, new ArrayOf(NormalizedAddress::class));
81
    }
82
83
    /**
84
     * Расчёт стоимости доставки.
85
     *
86
     * @link https://otpravka.pochta.ru/specification#/nogroup-rate_calculate
87
     *
88
     * @param  CalculationRequest  $request
89
     *
90
     * @return Calculation
91
     */
92
    public function calculate(CalculationRequest $request): Calculation
93
    {
94
        /** @var Calculation $calculation */
95
        $calculation = $this->client->post('/1.0/tariff', $request, Calculation::class);
96
97
        if ($calculation->getTotalRate()->getAmountWithVAT() === 0) {
98
            throw CalculationException::becauseZeroTotalRate();
99
        }
100
101
        return $calculation;
102
    }
103
104
    /**
105
     * Получение баланса расчётного счёта.
106
     *
107
     * @link https://otpravka.pochta.ru/specification#/nogroup-counterpart_balance
108
     *
109
     * @return Balance
110
     */
111 1
    public function getBalance(): Balance
112
    {
113 1
        return $this->client->get('/1.0/counterpart/balance', null, Balance::class);
114
    }
115
116
    /**
117
     * Проверка благонадёжности получателя(ей).
118
     *
119
     * @link https://otpravka.pochta.ru/specification#/nogroup-unreliable_recipient
120
     *
121
     * @param  CheckRecipientRequest  $request
122
     *
123
     * @return iterable|CheckedRecipient[]
124
     */
125 1
    public function checkRecipient(CheckRecipientRequest $request): iterable
126
    {
127 1
        return $this->client->post('/1.0/unreliable-recipient', $request, new ArrayOf(CheckedRecipient::class));
128
    }
129
}
130