Completed
Branch develop (c4337b)
by Romain
01:55
created

CallbackEventFactory::create()   C

Complexity

Conditions 8
Paths 8

Size

Total Lines 32
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

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