Passed
Push — master ( a79025...0532d8 )
by Fabian
04:09
created

KrakenApi::getOrderBook()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 5
ccs 0
cts 4
cp 0
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * @author  Fabian Hanisch
4
 * @since   16.07.2017 02:56
5
 * @version 1.0
6
 */
7
8
namespace HanischIt\KrakenApi;
9
10
use HanischIt\KrakenApi\External\HttpClient;
11
use HanischIt\KrakenApi\Model\AccountBalance\AccountBalanceRequest;
12
use HanischIt\KrakenApi\Model\AccountBalance\AccountBalanceResponse;
13
use HanischIt\KrakenApi\Model\AddOrder\AddOrderRequest;
14
use HanischIt\KrakenApi\Model\Assets\AssetsRequest;
15
use HanischIt\KrakenApi\Model\Assets\AssetsResponse;
16
use HanischIt\KrakenApi\Model\GetTicker\TickerRequest;
17
use HanischIt\KrakenApi\Model\GetTicker\TickerResponse;
18
use HanischIt\KrakenApi\Model\Header;
19
use HanischIt\KrakenApi\Model\OrderBook\OrderBookRequest;
20
use HanischIt\KrakenApi\Model\OrderBook\OrderBookResponse;
21
use HanischIt\KrakenApi\Model\RequestInterface;
22
use HanischIt\KrakenApi\Model\RequestOptions;
23
use HanischIt\KrakenApi\Model\ResponseInterface;
24
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeRequest;
25
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeResponse;
26
use HanischIt\KrakenApi\Service\RequestService\Nonce;
27
use HanischIt\KrakenApi\Service\RequestService\Request;
28
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
29
30
/**
31
 * Class KrakenApi
32
 *
33
 * @package HanischIt\KrakenApi
34
 */
35
class KrakenApi
36
{
37
    /**
38
     * @var HttpClient
39
     */
40
    private $httpClient;
41
    /**
42
     * @var RequestHeader
43
     */
44
    private $requestHeader;
45
    /**
46
     * @var string
47
     */
48
    private $apiKey;
49
    /**
50
     * @var string
51
     */
52
    private $apiSign;
53
    /**
54
     * @var string
55
     */
56
    private $version;
57
    /**
58
     * @var string
59
     */
60
    private $endpoint;
61
62
    /**
63
     * KrakenApi constructor.
64
     *
65
     * @param string $apiKey
66
     * @param string $apiSign
67
     */
68
    public function __construct($apiKey, $apiSign)
69
    {
70
        $this->httpClient = new HttpClient(['verify' => false]);
71
        $this->requestHeader = new RequestHeader();
72
        $this->endpoint = 'https://api.kraken.com/';
73
        $this->version = '0';
74
        $this->apiKey = $apiKey;
75
        $this->apiSign = $apiSign;
76
    }
77
78
    /**
79
     * @return ServerTimeResponse|ResponseInterface
80
     */
81
    public function getServerTime()
82
    {
83
        $serverTimeRequest = new ServerTimeRequest();
84
85
        return $this->doRequest($serverTimeRequest);
86
    }
87
88
    /**
89
     * @return AccountBalanceResponse|ResponseInterface
90
     */
91
    public function getAccountBalance()
92
    {
93
        $accountBalanceRequest = new AccountBalanceRequest();
94
95
        return $this->doRequest($accountBalanceRequest);
96
    }
97
98
    /**
99
     * @param string $pair
100
     * @param string $type
101
     * @param string $orderType
102
     * @param null|float $price
103
     * @param null|float $volume
104
     *
105
     * @return ResponseInterface
106
     */
107
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
108
    {
109
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
110
111
        return $this->doRequest($addOrderRequest);
112
    }
113
114
    /**
115
     * @return ResponseInterface|AssetsResponse
116
     */
117
    public function getAssets()
118
    {
119
        $assetsRequest = new AssetsRequest();
120
121
        return $this->doRequest($assetsRequest);
122
    }
123
124
    /**
125
     * @param array $assetNames
126
     *
127
     * @return ResponseInterface|TickerResponse
128
     */
129
    public function getTicker(array $assetNames)
130
    {
131
        $tickerRequest = new TickerRequest($assetNames);
132
133
        return $this->doRequest($tickerRequest);
134
    }
135
136
    /**
137
     * @param string $assetPair
138
     * @param int|null $count
139
     * @return ResponseInterface|OrderBookResponse
140
     */
141
    public function getOrderBook($assetPair, $count = null)
142
    {
143
        $orderBookRequest = new OrderBookRequest($assetPair, $count);
0 ignored issues
show
Bug introduced by
It seems like $count can also be of type integer; however, parameter $count of HanischIt\KrakenApi\Mode...kRequest::__construct() does only seem to accept null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

143
        $orderBookRequest = new OrderBookRequest($assetPair, /** @scrutinizer ignore-type */ $count);
Loading history...
144
145
        return $this->doRequest($orderBookRequest);
146
    }
147
148
    /**
149
     * @param RequestInterface $requestInterface
150
     *
151
     * @return ResponseInterface
152
     */
153
    private function doRequest(RequestInterface $requestInterface)
154
    {
155
        $requestOptions = new RequestOptions($this->endpoint, $this->version);
156
        $header = new Header($this->apiKey, $this->apiSign);
157
        $nonce = new Nonce();
158
        $request = new Request($this->httpClient, $this->requestHeader, $nonce);
159
160
        return $request->execute($requestInterface, $requestOptions, $header);
161
    }
162
}
163