. */ namespace SP\Plugin; use Defuse\Crypto\Exception\CryptoException; use SP\Core\Exceptions\ConstraintException; use SP\Core\Exceptions\NoSuchPropertyException; use SP\Core\Exceptions\QueryException; use SP\Repositories\NoSuchItemException; use SP\Repositories\Plugin\PluginDataModel; use SP\Services\Plugin\PluginDataService; use SP\Services\ServiceException; /** * Class PluginOperation * * @package SP\Plugin */ final class PluginOperation { /** * @var PluginDataService */ private $pluginDataService; /** * @var string */ private $pluginName; /** * PluginOperation constructor. * * @param PluginDataService $pluginDataService * @param string $pluginName */ public function __construct(PluginDataService $pluginDataService, string $pluginName) { $this->pluginDataService = $pluginDataService; $this->pluginName = $pluginName; } /** * @param int $itemId * @param mixed $data * * @return int * @throws CryptoException * @throws ConstraintException * @throws NoSuchPropertyException * @throws QueryException * @throws ServiceException */ public function create(int $itemId, $data): int { $itemData = new PluginDataModel(); $itemData->setName($this->pluginName); $itemData->setItemId($itemId); $itemData->setData(serialize($data)); return $this->pluginDataService->create($itemData)->getLastId(); } /** * @param int $itemId * @param mixed $data * * @return int * @throws CryptoException * @throws ConstraintException * @throws NoSuchPropertyException * @throws QueryException * @throws ServiceException */ public function update(int $itemId, $data): int { $itemData = new PluginDataModel(); $itemData->setName($this->pluginName); $itemData->setItemId($itemId); $itemData->setData(serialize($data)); return $this->pluginDataService->update($itemData); } /** * @param int $itemId * * @throws ConstraintException * @throws QueryException * @throws NoSuchItemException */ public function delete(int $itemId) { $this->pluginDataService->deleteByItemId($this->pluginName, $itemId); } /** * @param int $itemId * @param string|null $class * * @return mixed|null * @throws ConstraintException * @throws CryptoException * @throws NoSuchPropertyException * @throws QueryException * @throws ServiceException */ public function get(int $itemId, string $class = null) { try { return $this->pluginDataService->getByItemId($this->pluginName, $itemId)->hydrate($class); } catch (NoSuchItemException $e) { return null; } } }