Api::sendRequest()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 1
dl 0
loc 9
ccs 0
cts 6
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace leocata\M1;
4
5
use leocata\M1\Abstracts\CallbackMethods;
6
use leocata\M1\Abstracts\RequestMethods;
7
use leocata\M1\Exceptions\MethodNotFound;
8
use leocata\M1\Exceptions\MissingMandatoryField;
9
use leocata\M1\InternalFunctionality\DummyLogger;
10
use leocata\M1\Methods\Request\ContactAccept;
11
use leocata\M1\Methods\Request\MessageDelivered;
12
use leocata\M1\Methods\Request\MessageTyped;
13
use leocata\M1\Methods\Request\SendMessage;
14
use Psr\Log\LoggerInterface;
15
16
/**
17
 * Class Api.
18
 */
19
class Api
20
{
21
    /**
22
     * @var DummyLogger|LoggerInterface
23
     */
24
    protected $logger;
25
    /**
26
     * @var
27
     */
28
    private $client;
29
    /**
30
     * @var
31
     */
32
    private $auth;
33
34
    /**
35
     * @param LoggerInterface $logger
36
     */
37 2
    public function __construct(LoggerInterface $logger = null)
38
    {
39 2
        if ($logger === null) {
40 2
            $logger = new DummyLogger();
41
        }
42 2
        $this->logger = $logger;
43 2
    }
44
45
    /**
46
     * @param string $data
47
     *
48
     * @throws MethodNotFound | MissingMandatoryField
49
     *
50
     * @return bool|CallbackMethods
51
     */
52 1
    public function getCallbackMethod(string $data)
53
    {
54 1
        $data = \GuzzleHttp\json_decode($data);
55 1
        if (empty($data->method)) {
56
            return false;
57
        }
58
59 1
        $class = '\leocata\M1\Methods\Callback\\'.ucfirst($data->method);
60
61 1
        if (!class_exists($class)) {
62
            throw new MethodNotFound(sprintf(
63
                'The method "%s" not found, please correct',
64
                $class
65
            ));
66
        }
67
68
        /** @var \leocata\M1\Abstracts\CallbackMethods $method */
69 1
        $method = new $class();
70 1
        $method->import($data->params ?? new \stdClass());
71
72 1
        return $method;
73
    }
74
75
    /**
76
     * Performs the request to the Api servers.
77
     *
78
     * @param RequestMethods $method
79
     *
80
     * @return RequestMethods
81
     */
82
    public function sendRequest(RequestMethods $method)
83
    {
84
        $this->client = new HttpClient($this->auth);
85
        $response = $this->client->getResponseContent($method->getRequestString());
86
        if (!empty($response)) {
87
            $method->setResult($response);
88
        }
89
90
        return $method;
91
    }
92
93
    /**
94
     * Quick send new message.
95
     *
96
     * @param $sessionId
97
     * @param $destination
98
     * @param $code
99
     * @param $type
100
     * @param $content
101
     *
102
     * @return RequestMethods
103
     */
104
    public function sendMessage($sessionId, $destination, $code, $type, $content)
105
    {
106
        $message = new SendMessage();
107
        $message->sessionid = $sessionId;
108
        $message->dest = $destination;
109
        $message->code = $code;
110
        $message->type = $type;
111
        $message->content = $content;
112
113
        return $this->sendRequest($message);
114
    }
115
116
    /**
117
     * Quick send message delivery status.
118
     *
119
     * @param $sessionId
120
     * @param $messageId
121
     *
122
     * @return RequestMethods
123
     */
124
    public function messageDelivered($sessionId, $messageId)
125
    {
126
        $messDelivered = new MessageDelivered();
127
        $messDelivered->sessionid = $sessionId;
128
        $messDelivered->messageid = $messageId;
129
130
        return $this->sendRequest($messDelivered);
131
    }
132
133
    /**
134
     * Send message type indicator.
135
     *
136
     * @param $sessionId
137
     * @param $userId
138
     *
139
     * @return RequestMethods
140
     */
141
    public function messageTyped($sessionId, $userId)
142
    {
143
        $messageTyped = new MessageTyped();
144
        $messageTyped->sessionid = $sessionId;
145
        $messageTyped->userid = $userId;
146
147
        return $this->sendRequest($messageTyped);
148
    }
149
150
    /**
151
     * Send contact Accept.
152
     *
153
     * @param $userId
154
     * @param $message
155
     * @param $state
156
     *
157
     * @return RequestMethods
158
     */
159
    public function contactAccept($userId, $message, $state)
160
    {
161
        $contactAccept = new ContactAccept();
162
        $contactAccept->userid = $userId;
163
        $contactAccept->message = $message;
164
        $contactAccept->state = $state;
165
166
        return $this->sendRequest($contactAccept);
167
    }
168
169
    /**
170
     * @return Authorization
171
     */
172
    public function getAuth() : Authorization
173
    {
174
        return $this->auth;
175
    }
176
177
    /**
178
     * @param mixed Authorization
179
     */
180
    public function setAuth(Authorization $auth)
181
    {
182
        $this->auth = $auth;
183
    }
184
}
185