GuzzleHttpService.php 2.18 KB
Newer Older
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
/**
 * gredu_labs
 *
 * @link https://github.com/eellak/gredu_labs for the canonical source repository
 * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/)
 * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html
 */

namespace  SchInventory;

use GuzzleHttp\ClientInterface;

/**
 * Inventory service implementation using GuzzleHttp library
 */
class GuzzleHttpService implements ServiceInterface
{
    /**
     * @var ClientInterface
     */
    protected $httpClient;

    /**
     * Class constructor
     *
     * @param ClientInterface $httpClient
     */
    public function __construct(ClientInterface $httpClient)
    {
        $this->httpClient = $httpClient;
    }

    /**
     * Retrieves all equipment data for unit
     *
     * @param mixed $unit
     * @return EquipmentCollection
     */
    public function getUnitEquipment($unit)
    {
        $response = $this->httpClient->request('GET', $this->createBaseUri($unit));

        $responseData = json_decode($response->getBody()->getContents(), true);

        return new EquipmentCollection(
            array_map([$this, 'hydrateEquipment'], $responseData['flat_results'])
        );
    }

    /**
     * Creates the uri with the unit query parameter
     *
     * @param mixed $unit
     * @return Psr\Http\Message\UriInterface
     */
    private function createBaseUri($unit)
    {
        $config  = $this->httpClient->getConfig();
        $baseUri = $config['base_uri'];

        return $baseUri->withQueryValue($baseUri, 'unit', $unit);
    }

    private function hydrateEquipment(array $data)
    {
        return new Equipment(
            (isset($data['id']) ? $data['id'] : null),
            (isset($data['item_template.category.name']) ? $data['item_template.category.name'] : null),
            (isset($data['item_template.description']) ? $data['item_template.description'] : null),
            (isset($data['location.name']) ? $data['location.name'] : null),
            (isset($data['item_template.manufacturer.name']) ? $data['item_template.manufacturer.name'] : null),
            (isset($data['property_number']) ? $data['property_number'] : null)
        );
    }
}