| @@ 10-60 (lines=51) @@ | ||
| 7 | use T4webDomainInterface\EntityFactoryInterface; |
|
| 8 | use T4webDomainInterface\EventManagerInterface; |
|
| 9 | ||
| 10 | class Creator implements ServiceInterface |
|
| 11 | { |
|
| 12 | /** |
|
| 13 | * @var RepositoryInterface |
|
| 14 | */ |
|
| 15 | protected $repository; |
|
| 16 | ||
| 17 | /** |
|
| 18 | * @var EntityFactoryInterface |
|
| 19 | */ |
|
| 20 | protected $entityFactory; |
|
| 21 | ||
| 22 | /** |
|
| 23 | * @var EventManagerInterface |
|
| 24 | */ |
|
| 25 | protected $eventManager; |
|
| 26 | ||
| 27 | /** |
|
| 28 | * @param RepositoryInterface $repository |
|
| 29 | * @param EntityFactoryInterface $entityFactory |
|
| 30 | * @param EventManagerInterface|null $eventManager |
|
| 31 | */ |
|
| 32 | public function __construct( |
|
| 33 | RepositoryInterface $repository, |
|
| 34 | EntityFactoryInterface $entityFactory, |
|
| 35 | EventManagerInterface $eventManager = null |
|
| 36 | ) { |
|
| 37 | $this->repository = $repository; |
|
| 38 | $this->entityFactory = $entityFactory; |
|
| 39 | $this->eventManager = $eventManager; |
|
| 40 | } |
|
| 41 | ||
| 42 | public function handle($criteria, $data) |
|
| 43 | { |
|
| 44 | $entity = $this->entityFactory->create($data); |
|
| 45 | ||
| 46 | if ($this->eventManager) { |
|
| 47 | $event = $this->eventManager->createEvent('create.pre', $entity, $data); |
|
| 48 | $this->eventManager->trigger($event); |
|
| 49 | } |
|
| 50 | ||
| 51 | $this->repository->add($entity); |
|
| 52 | ||
| 53 | if ($this->eventManager) { |
|
| 54 | $event = $this->eventManager->createEvent('create.post', $entity, $data); |
|
| 55 | $this->eventManager->trigger($event); |
|
| 56 | } |
|
| 57 | ||
| 58 | return $entity; |
|
| 59 | } |
|
| 60 | } |
|
| 61 | ||
| @@ 13-62 (lines=50) @@ | ||
| 10 | use T4webDomainInterface\Infrastructure\RepositoryInterface; |
|
| 11 | use T4webDomainInterface\EventManagerInterface; |
|
| 12 | ||
| 13 | class Deleter implements ServiceInterface |
|
| 14 | { |
|
| 15 | /** |
|
| 16 | * |
|
| 17 | * @var RepositoryInterface |
|
| 18 | */ |
|
| 19 | protected $repository; |
|
| 20 | ||
| 21 | /** |
|
| 22 | * @var EventManagerInterface |
|
| 23 | */ |
|
| 24 | protected $eventManager; |
|
| 25 | ||
| 26 | /** |
|
| 27 | * @param RepositoryInterface $repository |
|
| 28 | */ |
|
| 29 | public function __construct(RepositoryInterface $repository, EventManagerInterface $eventManager = null) |
|
| 30 | { |
|
| 31 | $this->repository = $repository; |
|
| 32 | $this->eventManager = $eventManager; |
|
| 33 | } |
|
| 34 | ||
| 35 | /** |
|
| 36 | * @return EntityInterface |
|
| 37 | */ |
|
| 38 | public function handle($filter, $changes) |
|
| 39 | { |
|
| 40 | /** @var CriteriaInterface $criteria */ |
|
| 41 | $criteria = $this->repository->createCriteria($filter); |
|
| 42 | $entity = $this->repository->find($criteria); |
|
| 43 | ||
| 44 | if (!$entity) { |
|
| 45 | throw new EntityNotFoundException("Entity does not found."); |
|
| 46 | } |
|
| 47 | ||
| 48 | if ($this->eventManager) { |
|
| 49 | $event = $this->eventManager->createEvent('delete.pre', $entity); |
|
| 50 | $this->eventManager->trigger($event); |
|
| 51 | } |
|
| 52 | ||
| 53 | $this->repository->remove($entity); |
|
| 54 | ||
| 55 | if ($this->eventManager) { |
|
| 56 | $event = $this->eventManager->createEvent('delete.post', $entity); |
|
| 57 | $this->eventManager->trigger($event); |
|
| 58 | } |
|
| 59 | ||
| 60 | return $entity; |
|
| 61 | } |
|
| 62 | } |
|
| 63 | ||