--- /dev/null
+<?php
+
+namespace App\Events;
+
+use App\EmailBatch;
+use App\MailgunEvent;
+use Illuminate\Broadcasting\Channel;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Broadcasting\PresenceChannel;
+use Illuminate\Broadcasting\PrivateChannel;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+use Illuminate\Support\Arr;
+use Illuminate\Support\Str;
+
+class DispatchMailgunEvent implements ShouldBroadcast
+{
+ use Dispatchable, InteractsWithSockets, SerializesModels;
+
+
+ /**
+ * @var EmailBatch
+ */
+ private $batch_id;
+
+ public $data;
+
+ private $broadcast;
+
+
+ /**
+ * Create a new event instance.
+ *
+ * @param $webhookData
+ */
+ public function __construct($webhookData)
+ {
+ $tags = Arr::get($webhookData, 'event-data.tags');
+
+ $broadcast = in_array(env('APP_ENV'), $tags, true);
+
+
+ /** @todo check webhook key */
+
+ $this->batch_id = Str::after(Arr::first($tags, function($tag) {
+ return Str::startsWith($tag, 'batch_id_');
+ }), 'batch_id_');
+
+ $event = MailgunEvent::updateOrCreate([
+ 'event' => Arr::get($webhookData, 'event-data.event'),
+ 'recipient' => Arr::get($webhookData, 'event-data.recipient'),
+ 'email_batch_id' => $this->batch_id
+ ]);
+
+ $event->touch();
+
+ $this->data = $event;
+ }
+
+ /**
+ * Get the channels the event should broadcast on.
+ *
+ * @return \Illuminate\Broadcasting\Channel|array
+ */
+ public function broadcastOn()
+ {
+ return new PrivateChannel('emailBatch.'.$this->batch_id);
+ }
+
+ public function broadcastWhen()
+ {
+ return $this->broadcast;
+ }
+
+ /**
+ * The event's broadcast name.
+ */
+ public function broadcastAs()
+ {
+ return 'mailgun.event';
+ }
+}
--- /dev/null
+<?php
+
+namespace App\Events;
+
+use Illuminate\Broadcasting\Channel;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Broadcasting\PresenceChannel;
+use Illuminate\Broadcasting\PrivateChannel;
+use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+
+class MailgunWebhook
+{
+ use Dispatchable, InteractsWithSockets, SerializesModels;
+
+ public $webhookData;
+
+ /**
+ * Create a new event instance.
+ *
+ * @param $webhookData
+ */
+ public function __construct($webhookData)
+ {
+ $this->webhookData = $webhookData;
+ }
+
+
+}
+++ /dev/null
-<?php
-
-namespace App\Events;
-
-use App\EmailBatch;
-use App\MailgunEvent;
-use Illuminate\Broadcasting\Channel;
-use Illuminate\Broadcasting\InteractsWithSockets;
-use Illuminate\Broadcasting\PresenceChannel;
-use Illuminate\Broadcasting\PrivateChannel;
-use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
-use Illuminate\Foundation\Events\Dispatchable;
-use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Arr;
-use Illuminate\Support\Str;
-
-class ProcessMailgunWebhook implements ShouldBroadcast
-{
- use Dispatchable, InteractsWithSockets, SerializesModels;
-
-
- /**
- * @var EmailBatch
- */
- private $batch_id;
-
- public $data;
-
- private $broadcast;
-
-
- /**
- * Create a new event instance.
- *
- * @return void
- */
- public function __construct($webhookData)
- {
- $tags = Arr::get($webhookData, 'event-data.tags');
-
- $broadcast = in_array(env('APP_ENV'), $tags, true);
-
-
- /** @todo check webhook key */
-
- $this->batch_id = Str::after(Arr::first($tags, function($tag) {
- return Str::startsWith($tag, 'batch_id_');
- }), 'batch_id_');
-
- $event = MailgunEvent::updateOrCreate([
- 'event' => Arr::get($webhookData, 'event-data.event'),
- 'recipient' => Arr::get($webhookData, 'event-data.recipient'),
- 'email_batch_id' => $this->batch_id
- ]);
-
- $event->touch();
-
- $this->data = $event;
- }
-
- /**
- * Get the channels the event should broadcast on.
- *
- * @return \Illuminate\Broadcasting\Channel|array
- */
- public function broadcastOn()
- {
- return new PrivateChannel('emailBatch.'.$this->batch_id);
- }
-
- public function broadcastWhen()
- {
- return $this->broadcast;
- }
-
- /**
- * The event's broadcast name.
- */
- public function broadcastAs()
- {
- return 'mailgun.event';
- }
-}
namespace App\Http\Controllers;
-use App\Events\ProcessMailgunWebhook;
+use App\Events\DispatchMailgunEvent;
+use App\Events\MailgunWebhook;
use Illuminate\Http\Request;
class WebhookController extends Controller
{
public function mailgunEvent(Request $request)
{
- event(new ProcessMailgunWebhook($request->toArray()));
+ event(new MailgunWebhook($request->toArray()));
return response('ok', 200);
}
]
];
- event(new ProcessMailgunWebhook($data));
+ event(new DispatchMailgunEvent($data));
return response('ok', 200);
--- /dev/null
+<?php
+
+namespace App\Listeners;
+
+use App\Events\DispatchMailgunEvent;
+use App\Events\MailgunWebhook;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Queue\InteractsWithQueue;
+
+class ProcessMailgunWebhook implements ShouldQueue
+{
+ /**
+ * Create the event listener.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ //
+ }
+
+ /**
+ * Handle the event.
+ *
+ * @param MailgunWebhook $event
+ * @return void
+ */
+ public function handle(MailgunWebhook $event)
+ {
+ event(new DispatchMailgunEvent($event->webhookData));
+ }
+}
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
-use App\Events\ProcessMailgunWebhook;
+use App\Events\DispatchMailgunEvent;
use App\Events\ProcessBatch;
+use App\Events\MailgunWebhook;
+use App\Listeners\ProcessMailgunWebhook;
class EventServiceProvider extends ServiceProvider
{
Registered::class => [
SendEmailVerificationNotification::class,
],
- ProcessMailgunWebhook::class => [],
+ MailgunWebhook::class => [ProcessMailgunWebhook::class],
+ DispatchMailgunEvent::class => [],
ProcessBatch::class => [],
];