*/ class SubscribeSubscriberCommandHandler { /** * Handle the subscribe subscriber command. * * @param \CachetHQ\Cachet\Bus\Commands\Subscriber\SubscribeSubscriberCommand $command * * @throws \CachetHQ\Cachet\Exceptions\AlreadySubscribedException * * @return \CachetHQ\Cachet\Models\Subscriber */ public function handle(SubscribeSubscriberCommand $command) { if (Subscriber::where('email', $command->email)->first() && $command->subscriptions === null) { throw new AlreadySubscribedException("Cannot subscribe {$command->email} because they're already subscribed."); } $subscriber = Subscriber::firstOrCreate(['email' => $command->email]); if ($subscriptions = $command->subscriptions) { foreach ($subscriptions as $subscription => $subscriptionValue) { Subscription::firstOrCreate([ 'subscriber_id' => $subscriber->id, $subscription => $subscriptionValue, ]); } } if ($subscriber->is_verified === false) { if ($command->verified) { dispatch(new VerifySubscriberCommand($subscriber)); } else { event(new SubscriberHasSubscribedEvent($subscriber)); } } else { event(new SubscriberHasUpdatedSubscriptionsEvent($subscriber)); } return $subscriber; } }