Passed
Push — develop ( e6b589...a2874e )
by Romain
02:29
created

EventFactory::createRawEvent()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 5
cts 5
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 5
nc 1
nop 1
crap 1
1
<?php
2
namespace Kerox\Messenger\Event;
3
4
use Kerox\Messenger\Model\Callback\AccountLinking;
5
use Kerox\Messenger\Model\Callback\Delivery;
6
use Kerox\Messenger\Model\Callback\Message;
7
use Kerox\Messenger\Model\Callback\MessageEcho;
8
use Kerox\Messenger\Model\Callback\Optin;
9
use Kerox\Messenger\Model\Callback\Postback;
10
use Kerox\Messenger\Model\Callback\Read;
11
12
class EventFactory
13
{
14
15
    /**
16
     * @param array $payload
17
     * @return \Kerox\Messenger\Event\AbstractEvent
18
     */
19 11
    public static function create(array $payload): AbstractEvent
20
    {
21 11
        if (isset($payload['message'])) {
22 5
            if (isset($payload['message']['is_echo'])) {
23 1
                return self::createMessageEchoEvent($payload);
24
            }
25
26 4
            return self::createMessageEvent($payload);
27
        }
28
29 6
        if (isset($payload['postback'])) {
30 1
            return self::createPostbackEvent($payload);
31
        }
32
33 5
        if (isset($payload['optin'])) {
34 1
            return self::createOptinEvent($payload);
35
        }
36
37 4
        if (isset($payload['account_linking'])) {
38 1
            return self::createAcountLinkingEvent($payload);
39
        }
40
41 3
        if (isset($payload['delivery'])) {
42 1
            return self::createDeliveryEvent($payload);
43
        }
44
45 2
        if (isset($payload['read'])) {
46 1
            return self::createReadEvent($payload);
47
        }
48
49 1
        return self::createRawEvent($payload);
50
    }
51
52
    /**
53
     * @param array $payload
54
     * @return \Kerox\Messenger\Event\RawEvent
55
     */
56 1
    public static function createRawEvent(array $payload): RawEvent
57
    {
58 1
        $senderId = $payload['sender']['id'];
59 1
        $recipientId = $payload['recipient']['id'];
60 1
        unset($payload['sender'], $payload['recipient']);
61
62 1
        return new RawEvent($senderId, $recipientId, $payload);
63
    }
64
65
    /**
66
     * @param array $payload
67
     * @return \Kerox\Messenger\Event\MessageEchoEvent
68
     */
69 1
    public static function createMessageEchoEvent(array $payload): MessageEchoEvent
70
    {
71 1
        $senderId = $payload['sender']['id'];
72 1
        $recipientId = $payload['recipient']['id'];
73 1
        $timestamp = $payload['timestamp'];
74 1
        $messageEcho = MessageEcho::create($payload['message']);
75
76 1
        return new MessageEchoEvent($senderId, $recipientId, $timestamp, $messageEcho);
77
    }
78
79
    /**
80
     * @param array $payload
81
     * @return \Kerox\Messenger\Event\MessageEvent
82
     */
83 4
    public static function createMessageEvent(array $payload): MessageEvent
84
    {
85 4
        $senderId = $payload['sender']['id'];
86 4
        $recipientId = $payload['recipient']['id'];
87 4
        $timestamp = $payload['timestamp'];
88 4
        $message = Message::create($payload['message']);
89
90 4
        return new MessageEvent($senderId, $recipientId, $timestamp, $message);
91
    }
92
93
    /**
94
     * @param array $payload
95
     * @return \Kerox\Messenger\Event\PostbackEvent
96
     */
97 1
    public static function createPostbackEvent(array $payload): PostbackEvent
98
    {
99 1
        $senderId = $payload['sender']['id'];
100 1
        $recipientId = $payload['recipient']['id'];
101 1
        $timestamp = $payload['timestamp'];
102 1
        $postback = Postback::create($payload['postback']);
103
104 1
        return new PostbackEvent($senderId, $recipientId, $timestamp, $postback);
105
    }
106
107
    /**
108
     * @param array $payload
109
     * @return \Kerox\Messenger\Event\OptinEvent
110
     */
111 1
    public static function createOptinEvent(array $payload): OptinEvent
112
    {
113 1
        $senderId = $payload['sender']['id'];
114 1
        $recipientId = $payload['recipient']['id'];
115 1
        $timestamp = $payload['timestamp'];
116 1
        $optin = Optin::create($payload['optin']);
117
118 1
        return new OptinEvent($senderId, $recipientId, $timestamp, $optin);
119
    }
120
121
    /**
122
     * @param $payload
123
     * @return \Kerox\Messenger\Event\AccountLinkingEvent
124
     */
125 1
    public static function createAcountLinkingEvent($payload): AccountLinkingEvent
126
    {
127 1
        $senderId = $payload['sender']['id'];
128 1
        $recipientId = $payload['recipient']['id'];
129 1
        $timestamp = $payload['timestamp'];
130 1
        $accountLinking = AccountLinking::create($payload['account_linking']);
131
132 1
        return new AccountLinkingEvent($senderId, $recipientId, $timestamp, $accountLinking);
133
    }
134
135
    /**
136
     * @param $payload
137
     * @return \Kerox\Messenger\Event\DeliveryEvent
138
     */
139 1
    public static function createDeliveryEvent($payload): DeliveryEvent
140
    {
141 1
        $senderId = $payload['sender']['id'];
142 1
        $recipientId = $payload['recipient']['id'];
143 1
        $delivery = Delivery::create($payload['delivery']);
144
145 1
        return new DeliveryEvent($senderId, $recipientId, $delivery);
146
    }
147
148
    /**
149
     * @param $payload
150
     * @return \Kerox\Messenger\Event\ReadEvent
151
     */
152 1
    public static function createReadEvent($payload): ReadEvent
153
    {
154 1
        $senderId = $payload['sender']['id'];
155 1
        $recipientId = $payload['recipient']['id'];
156 1
        $timestamp = $payload['timestamp'];
157 1
        $read = Read::create($payload['read']);
158
159 1
        return new ReadEvent($senderId, $recipientId, $timestamp, $read);
160
    }
161
}
162