forked from opengento/magento2-gdpr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathActionEntityRepository.php
126 lines (105 loc) · 4.39 KB
/
ActionEntityRepository.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
/**
* Copyright © OpenGento, All rights reserved.
* See LICENSE bundled with this library for license details.
*/
declare(strict_types=1);
namespace Opengento\Gdpr\Model;
use Exception;
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
use Magento\Framework\Api\SearchCriteriaInterface;
use Magento\Framework\Api\SearchResultsInterface;
use Magento\Framework\Exception\CouldNotDeleteException;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Phrase;
use Opengento\Gdpr\Api\ActionEntityRepositoryInterface;
use Opengento\Gdpr\Api\Data\ActionEntityInterface;
use Opengento\Gdpr\Api\Data\ActionEntityInterfaceFactory;
use Opengento\Gdpr\Api\Data\ActionEntitySearchResultsInterface;
use Opengento\Gdpr\Api\Data\ActionEntitySearchResultsInterfaceFactory;
use Opengento\Gdpr\Model\ResourceModel\ActionEntity as ActionEntityResource;
use Opengento\Gdpr\Model\ResourceModel\ActionEntity\Collection;
use Opengento\Gdpr\Model\ResourceModel\ActionEntity\CollectionFactory;
final class ActionEntityRepository implements ActionEntityRepositoryInterface
{
/**
* @var ActionEntityResource
*/
private ActionEntityResource $actionEntityResource;
/**
* @var ActionEntityInterfaceFactory
*/
private ActionEntityInterfaceFactory $actionFactory;
private CollectionFactory $collectionFactory;
private CollectionProcessorInterface $collectionProcessor;
/**
* @var ActionEntitySearchResultsInterfaceFactory
*/
private ActionEntitySearchResultsInterfaceFactory $searchResultsFactory;
/**
* @var ActionEntityInterface[]
*/
private array $instances = [];
public function __construct(
ActionEntityResource $actionEntityResource,
ActionEntityInterfaceFactory $actionFactory,
CollectionFactory $collectionFactory,
CollectionProcessorInterface $collectionProcessor,
ActionEntitySearchResultsInterfaceFactory $searchResultsFactory
) {
$this->actionEntityResource = $actionEntityResource;
$this->actionFactory = $actionFactory;
$this->collectionFactory = $collectionFactory;
$this->collectionProcessor = $collectionProcessor;
$this->searchResultsFactory = $searchResultsFactory;
}
public function save(ActionEntityInterface $actionEntity): ActionEntityInterface
{
try {
$this->actionEntityResource->save($actionEntity);
$this->instances[$actionEntity->getActionId()] = $actionEntity;
} catch (Exception $e) {
throw new CouldNotSaveException(new Phrase('Could not save the entity.'), $e);
}
return $actionEntity;
}
public function getById(int $actionId): ActionEntityInterface
{
if (!isset($this->instances[$actionId])) {
/** @var ActionEntityInterface $actionEntity */
$actionEntity = $this->actionFactory->create();
$this->actionEntityResource->load($actionEntity, $actionId, ActionEntityInterface::ID);
if (!$actionEntity->getActionId()) {
throw NoSuchEntityException::singleField(ActionEntityInterface::ID, $actionId);
}
$this->instances[$actionId] = $actionEntity;
}
return $this->instances[$actionId];
}
public function getList(SearchCriteriaInterface $searchCriteria): SearchResultsInterface
{
/** @var Collection $collection */
$collection = $this->collectionFactory->create();
$this->collectionProcessor->process($searchCriteria, $collection);
/** @var ActionEntitySearchResultsInterface $searchResults */
$searchResults = $this->searchResultsFactory->create();
$searchResults->setSearchCriteria($searchCriteria);
$searchResults->setItems($collection->getItems());
$searchResults->setTotalCount($collection->getSize());
return $searchResults;
}
public function delete(ActionEntityInterface $actionEntity): bool
{
try {
unset($this->instances[$actionEntity->getActionId()]);
$this->actionEntityResource->delete($actionEntity);
} catch (Exception $e) {
throw new CouldNotDeleteException(
new Phrase('Could not delete entity with id "%1".', [$actionEntity->getActionId()]),
$e
);
}
return true;
}
}