Files
2026-09-15 10:26:34 +08:00

150 lines
4.5 KiB
PHP

<?php
/**
* Copyright © All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Stemcell\Catalog\Model;
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
use Magento\Framework\Exception\CouldNotDeleteException;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\NoSuchEntityException;
use Stemcell\Catalog\Api\CryopreserveRepositoryInterface;
use Stemcell\Catalog\Api\Data\CryopreserveInterface;
use Stemcell\Catalog\Api\Data\CryopreserveInterfaceFactory;
use Stemcell\Catalog\Api\Data\CryopreserveSearchResultsInterfaceFactory;
use Stemcell\Catalog\Model\ResourceModel\Cryopreserve as ResourceCryopreserve;
use Stemcell\Catalog\Model\ResourceModel\Cryopreserve\CollectionFactory as CryopreserveCollectionFactory;
class CryopreserveRepository implements CryopreserveRepositoryInterface
{
/**
* @var CryopreserveInterfaceFactory
*/
protected $cryopreserveFactory;
/**
* @var Cryopreserve
*/
protected $searchResultsFactory;
/**
* @var ResourceCryopreserve
*/
protected $resource;
/**
* @var CollectionProcessorInterface
*/
protected $collectionProcessor;
/**
* @var CryopreserveCollectionFactory
*/
protected $cryopreserveCollectionFactory;
/**
* @param ResourceCryopreserve $resource
* @param CryopreserveInterfaceFactory $cryopreserveFactory
* @param CryopreserveCollectionFactory $cryopreserveCollectionFactory
* @param CryopreserveSearchResultsInterfaceFactory $searchResultsFactory
* @param CollectionProcessorInterface $collectionProcessor
*/
public function __construct(
ResourceCryopreserve $resource,
CryopreserveInterfaceFactory $cryopreserveFactory,
CryopreserveCollectionFactory $cryopreserveCollectionFactory,
CryopreserveSearchResultsInterfaceFactory $searchResultsFactory,
CollectionProcessorInterface $collectionProcessor
) {
$this->resource = $resource;
$this->cryopreserveFactory = $cryopreserveFactory;
$this->cryopreserveCollectionFactory = $cryopreserveCollectionFactory;
$this->searchResultsFactory = $searchResultsFactory;
$this->collectionProcessor = $collectionProcessor;
}
/**
* @inheritDoc
*/
public function save(CryopreserveInterface $cryopreserve)
{
try {
$this->resource->save($cryopreserve);
} catch (\Exception $exception) {
throw new CouldNotSaveException(__(
'Could not save the cryopreserve: %1',
$exception->getMessage()
));
}
return $cryopreserve;
}
/**
* @inheritDoc
*/
public function get($cryopreserveId)
{
$cryopreserve = $this->cryopreserveFactory->create();
$this->resource->load($cryopreserve, $cryopreserveId);
if (!$cryopreserve->getId()) {
throw new NoSuchEntityException(__('cryopreserve with id "%1" does not exist.', $cryopreserveId));
}
return $cryopreserve;
}
/**
* @inheritDoc
*/
public function getList(
\Magento\Framework\Api\SearchCriteriaInterface $criteria
) {
$collection = $this->cryopreserveCollectionFactory->create();
$this->collectionProcessor->process($criteria, $collection);
$searchResults = $this->searchResultsFactory->create();
$searchResults->setSearchCriteria($criteria);
$items = [];
foreach ($collection as $model) {
$items[] = $model;
}
$searchResults->setItems($items);
$searchResults->setTotalCount($collection->getSize());
return $searchResults;
}
/**
* @inheritDoc
*/
public function delete(CryopreserveInterface $cryopreserve)
{
try {
$cryopreserveModel = $this->cryopreserveFactory->create();
$this->resource->load($cryopreserveModel, $cryopreserve->getCryopreserveId());
$this->resource->delete($cryopreserveModel);
} catch (\Exception $exception) {
throw new CouldNotDeleteException(__(
'Could not delete the cryopreserve: %1',
$exception->getMessage()
));
}
return true;
}
/**
* @inheritDoc
*/
public function deleteById($cryopreserveId)
{
return $this->delete($this->get($cryopreserveId));
}
}