Clean up event processing dependencies

This commit is contained in:
Thibaud Fabre
2015-10-26 13:59:23 +01:00
parent f38179f941
commit a915a40a99
5 changed files with 52 additions and 30 deletions

View File

@@ -20,9 +20,13 @@ class EventProcessorFactory
{ {
switch ($event->getType()) { switch ($event->getType()) {
case WebhookEvent::FEED_ENTRY_TYPE: case WebhookEvent::FEED_ENTRY_TYPE:
return new FeedEntryProcessor($this->app); return new FeedEntryProcessor(
$this->app,
$this->app['repo.feed-entries'],
$this->app['phraseanet.user-query']
);
case WebhookEvent::USER_REGISTRATION_TYPE: case WebhookEvent::USER_REGISTRATION_TYPE:
return new UserRegistrationProcessor($this->app, $this->app['repo.users']); return new UserRegistrationProcessor($this->app['repo.users']);
default: default:
throw new \RuntimeException(sprintf('No processor found for %s', $event->getType())); throw new \RuntimeException(sprintf('No processor found for %s', $event->getType()));
} }

View File

@@ -1,15 +0,0 @@
<?php
namespace Alchemy\Phrasea\Webhook\Processor;
use Alchemy\Phrasea\Application;
abstract class AbstractProcessor
{
protected $app;
public function __construct(Application $app)
{
$this->app = $app;
}
}

View File

@@ -2,10 +2,34 @@
namespace Alchemy\Phrasea\Webhook\Processor; namespace Alchemy\Phrasea\Webhook\Processor;
use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Model\Entities\WebhookEvent; use Alchemy\Phrasea\Model\Entities\WebhookEvent;
use Alchemy\Phrasea\Model\Repositories\FeedEntryRepository;
class FeedEntryProcessor extends AbstractProcessor implements ProcessorInterface class FeedEntryProcessor implements ProcessorInterface
{ {
/**
* @var Application
*/
private $application;
/**
* @var FeedEntryRepository
*/
private $entryRepository;
/**
* @var \User_Query
*/
private $userQuery;
public function __construct(Application $application, FeedEntryRepository $entryRepository, \User_Query $userQuery)
{
$this->application = $application;
$this->entryRepository = $entryRepository;
$this->userQuery = $userQuery;
}
public function process(WebhookEvent $event) public function process(WebhookEvent $event)
{ {
$data = $event->getData(); $data = $event->getData();
@@ -14,17 +38,16 @@ class FeedEntryProcessor extends AbstractProcessor implements ProcessorInterface
return null; return null;
} }
$entry = $this->app['orm.em']->getRepository('Phraseanet::Entry')->find($data->entry_id); $entry = $this->entryRepository->find($data->entry_id);
if (null === $entry) { if (null === $entry) {
return null; return null;
} }
$data = $this->event->getData(); $data = $event->getData();
$feed = $entry->getFeed(); $feed = $entry->getFeed();
$query = $this->app['phraseanet.user-query']; $query = $this->userQuery;
$query->include_phantoms(true) $query->include_phantoms(true)
->include_invite(false) ->include_invite(false)
@@ -52,7 +75,7 @@ class FeedEntryProcessor extends AbstractProcessor implements ProcessorInterface
} while (count($results) > 0); } while (count($results) > 0);
return [ return [
'event' => $this->event->getName(), 'event' => $event->getName(),
'users_were_notified' => isset($data->notify_email) ?: (bool) $data->notify_email, 'users_were_notified' => isset($data->notify_email) ?: (bool) $data->notify_email,
'feed' => [ 'feed' => [
'id' => $feed->getId(), 'id' => $feed->getId(),

View File

@@ -6,17 +6,15 @@ use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Model\Entities\WebhookEvent; use Alchemy\Phrasea\Model\Entities\WebhookEvent;
use Alchemy\Phrasea\Model\Repositories\UserRepository; use Alchemy\Phrasea\Model\Repositories\UserRepository;
class UserRegistrationProcessor extends AbstractProcessor implements ProcessorInterface class UserRegistrationProcessor implements ProcessorInterface
{ {
/** /**
* @var UserRepository * @var UserRepository
*/ */
private $userRepository; private $userRepository;
public function __construct(Application $application, UserRepository $userRepository) public function __construct(UserRepository $userRepository)
{ {
parent::__construct($application);
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
} }

View File

@@ -21,7 +21,11 @@ class FeedEntryProcessorTest extends \PhraseanetTestCase
]); ]);
$event->setName(WebhookEvent::NEW_FEED_ENTRY); $event->setName(WebhookEvent::NEW_FEED_ENTRY);
$event->setType(WebhookEvent::FEED_ENTRY_TYPE); $event->setType(WebhookEvent::FEED_ENTRY_TYPE);
$processor = new FeedEntryProcessor(self::$DI['app']); $processor = new FeedEntryProcessor(
self::$DI['app'],
self::$DI['app']['repo.feed-entries'],
self::$DI['app']['phraseanet.user-query']
);
$this->assertEquals($processor->process($event), null); $this->assertEquals($processor->process($event), null);
} }
@@ -33,7 +37,11 @@ class FeedEntryProcessorTest extends \PhraseanetTestCase
]); ]);
$event->setName(WebhookEvent::NEW_FEED_ENTRY); $event->setName(WebhookEvent::NEW_FEED_ENTRY);
$event->setType(WebhookEvent::FEED_ENTRY_TYPE); $event->setType(WebhookEvent::FEED_ENTRY_TYPE);
$processor = new FeedEntryProcessor(self::$DI['app']); $processor = new FeedEntryProcessor(
self::$DI['app'],
self::$DI['app']['repo.feed-entries'],
self::$DI['app']['phraseanet.user-query']
);
$this->assertEquals($processor->process($event), null); $this->assertEquals($processor->process($event), null);
} }
@@ -46,7 +54,11 @@ class FeedEntryProcessorTest extends \PhraseanetTestCase
]); ]);
$event->setName(WebhookEvent::NEW_FEED_ENTRY); $event->setName(WebhookEvent::NEW_FEED_ENTRY);
$event->setType(WebhookEvent::FEED_ENTRY_TYPE); $event->setType(WebhookEvent::FEED_ENTRY_TYPE);
$processor = new FeedEntryProcessor(self::$DI['app']); $processor = new FeedEntryProcessor(
self::$DI['app'],
self::$DI['app']['repo.feed-entries'],
self::$DI['app']['phraseanet.user-query']
);
$this->assertEquals($processor->process($event), null); $this->assertEquals($processor->process($event), null);
} }
} }