Files
stemcell/app/code/Stemcell/Customer/Model/SalespersonRepository.php
T
2026-09-15 10:26:34 +08:00

146 lines
4.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Stemcell\Customer\Model;
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
use Magento\Framework\Exception\CouldNotDeleteException;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\NoSuchEntityException;
use Stemcell\Customer\Api\Data\SalespersonInterface;
use Stemcell\Customer\Api\Data\SalespersonInterfaceFactory;
use Stemcell\Customer\Api\Data\SalespersonSearchResultsInterfaceFactory;
use Stemcell\Customer\Api\SalespersonRepositoryInterface;
use Stemcell\Customer\Model\ResourceModel\Salesperson as ResourceSalesperson;
use Stemcell\Customer\Model\ResourceModel\Salesperson\CollectionFactory as SalespersonCollectionFactory;
class SalespersonRepository implements SalespersonRepositoryInterface
{
/**
* @var ResourceSalesperson
*/
protected $resource;
/**
* @var SalespersonInterfaceFactory
*/
protected $salespersonFactory;
/**
* @var SalespersonCollectionFactory
*/
protected $salespersonCollectionFactory;
/**
* @var Salesperson
*/
protected $searchResultsFactory;
/**
* @var CollectionProcessorInterface
*/
protected $collectionProcessor;
/**
* @param ResourceSalesperson $resource
* @param SalespersonInterfaceFactory $salespersonFactory
* @param SalespersonCollectionFactory $salespersonCollectionFactory
* @param SalespersonSearchResultsInterfaceFactory $searchResultsFactory
* @param CollectionProcessorInterface $collectionProcessor
*/
public function __construct(
ResourceSalesperson $resource,
SalespersonInterfaceFactory $salespersonFactory,
SalespersonCollectionFactory $salespersonCollectionFactory,
SalespersonSearchResultsInterfaceFactory $searchResultsFactory,
CollectionProcessorInterface $collectionProcessor
) {
$this->resource = $resource;
$this->salespersonFactory = $salespersonFactory;
$this->salespersonCollectionFactory = $salespersonCollectionFactory;
$this->searchResultsFactory = $searchResultsFactory;
$this->collectionProcessor = $collectionProcessor;
}
/**
* @inheritDoc
*/
public function save(SalespersonInterface $salesperson)
{
try {
$this->resource->save($salesperson);
} catch (\Exception $exception) {
throw new CouldNotSaveException(__(
'Could not save the salesperson: %1',
$exception->getMessage()
));
}
return $salesperson;
}
/**
* @inheritDoc
*/
public function get($salespersonId)
{
$salesperson = $this->salespersonFactory->create();
$this->resource->load($salesperson, $salespersonId);
if (!$salesperson->getId()) {
//throw new NoSuchEntityException(__('Salesperson with id "%1" does not exist.', $salespersonId));
}
return $salesperson;
}
/**
* @inheritDoc
*/
public function getList(
\Magento\Framework\Api\SearchCriteriaInterface $criteria
) {
$collection = $this->salespersonCollectionFactory->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(SalespersonInterface $salesperson)
{
try {
$salespersonModel = $this->salespersonFactory->create();
$this->resource->load($salespersonModel, $salesperson->getId());
$this->resource->delete($salespersonModel);
} catch (\Exception $exception) {
throw new CouldNotDeleteException(__(
'Could not delete the Salesperson: %1',
$exception->getMessage()
));
}
return true;
}
/**
* @inheritDoc
*/
public function deleteById($salespersonId)
{
return $this->delete($this->get($salespersonId));
}
}