Completed
Push — master ( d38af1...91cfa3 )
by Fabian
08:10
created

KrakenApi::getTradeBalance()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 2
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
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\AddOrder\AddOrderResponse;
15
use HanischIt\KrakenApi\Model\Assets\AssetsRequest;
16
use HanischIt\KrakenApi\Model\Assets\AssetsResponse;
17
use HanischIt\KrakenApi\Model\ClosedOrders\ClosedOrdersRequest;
18
use HanischIt\KrakenApi\Model\ClosedOrders\ClosedOrdersResponse;
19
use HanischIt\KrakenApi\Model\GetTicker\TickerRequest;
20
use HanischIt\KrakenApi\Model\GetTicker\TickerResponse;
21
use HanischIt\KrakenApi\Model\Header;
22
use HanischIt\KrakenApi\Model\OHLCData\OHLCDataRequest;
23
use HanischIt\KrakenApi\Model\OHLCData\OHLCDataResponse;
24
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersRequest;
25
use HanischIt\KrakenApi\Model\OpenOrders\OpenOrdersResponse;
26
use HanischIt\KrakenApi\Model\OrderBook\OrderBookRequest;
27
use HanischIt\KrakenApi\Model\OrderBook\OrderBookResponse;
28
use HanischIt\KrakenApi\Model\OrdersInfo\OrdersInfoRequest;
29
use HanischIt\KrakenApi\Model\OrdersInfo\OrdersInfoResponse;
30
use HanischIt\KrakenApi\Model\RecentTrades\RecentTradesRequest;
31
use HanischIt\KrakenApi\Model\RecentTrades\RecentTradesResponse;
32
use HanischIt\KrakenApi\Model\RequestInterface;
33
use HanischIt\KrakenApi\Model\RequestOptions;
34
use HanischIt\KrakenApi\Model\ResponseInterface;
35
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeRequest;
36
use HanischIt\KrakenApi\Model\ServerTime\ServerTimeResponse;
37
use HanischIt\KrakenApi\Model\SpreadData\SpreadDataRequest;
38
use HanischIt\KrakenApi\Model\SpreadData\SpreadDataResponse;
39
use HanischIt\KrakenApi\Model\TradableAssetPairs\TradableAssetPairsRequest;
40
use HanischIt\KrakenApi\Model\TradableAssetPairs\TradableAssetPairsResponse;
41
use HanischIt\KrakenApi\Model\TradeBalance\TradeBalanceRequest;
42
use HanischIt\KrakenApi\Model\TradeBalance\TradeBalanceResponse;
43
use HanischIt\KrakenApi\Service\RequestService\GetRequest;
44
use HanischIt\KrakenApi\Service\RequestService\Nonce;
45
use HanischIt\KrakenApi\Service\RequestService\PostRequest;
46
use HanischIt\KrakenApi\Service\RequestService\Request;
47
use HanischIt\KrakenApi\Service\RequestService\RequestHeader;
48
49
/**
50
 * Class KrakenApi
51
 *
52
 * @package HanischIt\KrakenApi
53
 */
54
class KrakenApi
55
{
56
    /**
57
     * @var RequestOptions
58
     */
59
    private $requestOptions;
60
    /**
61
     * @var Header
62
     */
63
    private $header;
64
    /**
65
     * @var Request
66
     */
67
    private $request;
68
69
    /**
70
     * KrakenApi constructor.
71
     *
72
     * @param string $apiKey
73
     * @param string $apiSign
74
     * @param string $version
75
     * @param string $endpoint
76
     */
77 14
    public function __construct($apiKey, $apiSign, $version = '0', $endpoint = 'https://api.kraken.com/')
78
    {
79 14
        $httpClient = new HttpClient(['verify' => false]);
80 14
        $requestHeader = new RequestHeader();
81 14
        $nonce = new Nonce();
82
83 14
        $this->requestOptions = new RequestOptions($endpoint, $version);
84 14
        $postRequest = new PostRequest($httpClient, $requestHeader, $nonce);
85 14
        $getRequest = new GetRequest($httpClient, $requestHeader);
86 14
        $this->request = new Request($postRequest, $getRequest);
87 14
        $this->header = new Header($apiKey, $apiSign);
88 14
    }
89
90
    /**
91
     * @param Request $request
92
     */
93 14
    public function setRequest(Request $request)
94
    {
95 14
        $this->request = $request;
96 14
    }
97
98
    /**
99
     * @return ServerTimeResponse|ResponseInterface
100
     */
101 1
    public function getServerTime()
102
    {
103 1
        $serverTimeRequest = new ServerTimeRequest();
104
105 1
        return $this->doRequest($serverTimeRequest);
106
    }
107
108
    /**
109
     * @return AccountBalanceResponse|ResponseInterface
110
     */
111 1
    public function getAccountBalance()
112
    {
113 1
        $accountBalanceRequest = new AccountBalanceRequest();
114
115 1
        return $this->doRequest($accountBalanceRequest);
116
    }
117
118
    /**
119
     * @param string $pair
120
     * @param string $type
121
     * @param string $orderType
122
     * @param null|float $price
123
     * @param null|float $volume
124
     *
125
     * @return ResponseInterface|AddOrderResponse
126
     */
127 1
    public function addOrder($pair, $type, $orderType, $price = null, $volume = null)
128
    {
129 1
        $addOrderRequest = new AddOrderRequest($pair, $type, $orderType, $price, $volume);
130
131 1
        return $this->doRequest($addOrderRequest);
132
    }
133
134
    /**
135
     * @return ResponseInterface|AssetsResponse
136
     */
137 1
    public function getAssets()
138
    {
139 1
        $assetsRequest = new AssetsRequest();
140
141 1
        return $this->doRequest($assetsRequest);
142
    }
143
144
    /**
145
     * @param array $assetNames
146
     *
147
     * @return ResponseInterface|TickerResponse
148
     */
149 1
    public function getTicker(array $assetNames)
150
    {
151 1
        $tickerRequest = new TickerRequest($assetNames);
152
153 1
        return $this->doRequest($tickerRequest);
154
    }
155
156
    /**
157
     * @param string $assetPair
158
     * @param int|null $count
159
     *
160
     * @return ResponseInterface|OrderBookResponse
161
     */
162 1
    public function getOrderBook($assetPair, $count = null)
163
    {
164 1
        $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

164
        $orderBookRequest = new OrderBookRequest($assetPair, /** @scrutinizer ignore-type */ $count);
Loading history...
165
166 1
        return $this->doRequest($orderBookRequest);
167
    }
168
169
    /**
170
     * @param bool $trades
171
     * @param null $userref
172
     *
173
     * @return ResponseInterface|OpenOrdersResponse
174
     */
175 1
    public function getOpenOrders($trades = false, $userref = null)
176
    {
177 1
        $orderBookRequest = new OpenOrdersRequest($trades, $userref);
178
179 1
        return $this->doRequest($orderBookRequest);
180
    }
181
182
    /**
183
     * @param bool $trades
184
     * @param null $userref
185
     * @param null|string $start
186
     * @param null|string $end
187
     * @param null|int $ofs
188
     * @param null|string $closetime
189
     *
190
     * @return ClosedOrdersResponse|ResponseInterface
191
     */
192 1
    public function getClosedOrders(
193
        $trades = false,
194
        $userref = null,
195
        $start = null,
196
        $end = null,
197
        $ofs = null,
198
        $closetime = null
199
    )
200
    {
201 1
        $orderBookRequest = new ClosedOrdersRequest($trades, $userref, $start, $end, $ofs, $closetime);
202
203 1
        return $this->doRequest($orderBookRequest);
204
    }
205
206
    /**
207
     * @param string $assetPair
208
     * @param null|string $since
209
     *
210
     * @return ResponseInterface|RecentTradesResponse
211
     */
212 1
    public function getRecentTrades($assetPair, $since = null)
213
    {
214 1
        $recentTradeRequest = new RecentTradesRequest($assetPair, $since);
215
216 1
        return $this->doRequest($recentTradeRequest);
217
    }
218
219
    /**
220
     * @param string $assetPair
221
     * @param string $since
222
     * @return ResponseInterface|SpreadDataResponse
223
     */
224 1
    public function getSpreadData($assetPair, $since = null)
225
    {
226 1
        $spreadDataRequest = new SpreadDataRequest($assetPair, $since);
227
228 1
        return $this->doRequest($spreadDataRequest);
229
    }
230
231
    /**
232
     * @param string $info
233
     * @param array|null $assetPairs
234
     * @return ResponseInterface|TradableAssetPairsResponse
235
     */
236 1
    public function getTradableAssetPairs($info, array $assetPairs = null)
237
    {
238 1
        if (null !== $assetPairs) {
239 1
            $assetPairs = implode(',', $assetPairs);
240 1
        }
241 1
        $tradableAssetPairs = new TradableAssetPairsRequest($info, $assetPairs);
242
243 1
        return $this->doRequest($tradableAssetPairs);
244
    }
245
246
    /**
247
     * @param string $assetPair
248
     * @param null|int $interval
249
     * @param null|int $since
250
     * @return ResponseInterface|OHLCDataResponse
251
     */
252 1
    public function getOHLCData($assetPair, $interval = null, $since = null)
253
    {
254 1
        $ohlcDataRequest = new OHLCDataRequest($assetPair, $interval, $since);
255
256 1
        return $this->doRequest($ohlcDataRequest);
257
    }
258
259
    /**
260
     * @param array|null $txids
261
     * @param bool $trades
262
     * @param null|string $userref
263
     * @return ResponseInterface|OrdersInfoResponse
264
     */
265 1
    public function getOrdersInfo(array $txids, $trades = false, $userref = null)
266
    {
267 1
        $ordersInfoRequest = new OrdersInfoRequest($txids, $trades, $userref);
268
269 1
        return $this->doRequest($ordersInfoRequest);
270
    }
271
272
    /**
273
     * @param string|null $aclass
274
     * @param string|null $asset
275
     * @return ResponseInterface|TradeBalanceResponse
276
     */
277 1
    public function getTradeBalance($aclass = null, $asset = null)
278
    {
279 1
        $tradeBalanceRequest = new TradeBalanceRequest($aclass, $asset);
280
281 1
        return $this->doRequest($tradeBalanceRequest);
282
    }
283
284
    /**
285
     * @param RequestInterface $requestInterface
286
     *
287
     * @return ResponseInterface
288
     */
289 14
    private function doRequest(RequestInterface $requestInterface)
290
    {
291 14
        return $this->request->execute($requestInterface, $this->requestOptions, $this->header);
292
    }
293
}
294