Passed
Push — master ( dcbf99...d299e4 )
by Romain
29s
created

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