CaseRepository.php 3.58 KB
Newer Older
Ketan's avatar
Ketan committed
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 127 128 129 130 131 132 133 134
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Signifyd\Model;

use Magento\Framework\Api\SearchCriteriaInterface;
use Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface;
use Magento\Signifyd\Api\CaseRepositoryInterface;
use Magento\Signifyd\Api\Data\CaseInterface;
use Magento\Signifyd\Api\Data\CaseInterfaceFactory;
use Magento\Signifyd\Api\Data\CaseSearchResultsInterface;
use Magento\Signifyd\Api\Data\CaseSearchResultsInterfaceFactory;
use Magento\Signifyd\Model\ResourceModel\CaseEntity as CaseResourceModel;
use Magento\Signifyd\Model\ResourceModel\CaseEntity\Collection;
use Magento\Signifyd\Model\ResourceModel\CaseEntity\CollectionFactory;

/**
 * Repository for Case interface
 *
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class CaseRepository implements CaseRepositoryInterface
{
    /**
     * @var CollectionProcessorInterface
     */
    private $collectionProcessor;

    /**
     * @var CollectionFactory
     */
    private $collectionFactory;

    /**
     * @var CaseSearchResultsInterfaceFactory
     */
    private $searchResultsFactory;

    /**
     * @var CaseInterfaceFactory
     */
    private $caseFactory;

    /**
     * @var CaseResourceModel
     */
    private $resourceModel;

    /**
     * CaseRepository constructor.
     * @param CollectionProcessorInterface $collectionProcessor
     * @param CollectionFactory $collectionFactory
     * @param CaseSearchResultsInterfaceFactory $searchResultsFactory
     * @param CaseInterfaceFactory $caseFactory
     * @param CaseResourceModel $resourceModel
     */
    public function __construct(
        CollectionProcessorInterface $collectionProcessor,
        CollectionFactory $collectionFactory,
        CaseSearchResultsInterfaceFactory $searchResultsFactory,
        CaseInterfaceFactory $caseFactory,
        CaseResourceModel $resourceModel
    ) {
        $this->collectionProcessor = $collectionProcessor;
        $this->collectionFactory = $collectionFactory;
        $this->searchResultsFactory = $searchResultsFactory;
        $this->caseFactory = $caseFactory;
        $this->resourceModel = $resourceModel;
    }

    /**
     * @inheritdoc
     */
    public function save(CaseInterface $case)
    {
        /** @var CaseEntity $case */
        $this->resourceModel->save($case);

        return $case;
    }

    /**
     * @inheritdoc
     */
    public function getById($id)
    {
        /** @var CaseEntity $case */
        $case = $this->caseFactory->create();
        $this->resourceModel->load($case, $id);

        return $case;
    }

    /**
     * @inheritdoc
     */
    public function getByCaseId($caseId)
    {
        /** @var CaseEntity $case */
        $case = $this->caseFactory->create();
        $this->resourceModel->load($case, $caseId, 'case_id');

        return $case->getEntityId() ? $case : null;
    }

    /**
     * @inheritdoc
     */
    public function delete(CaseInterface $case)
    {
        $this->resourceModel->delete($case);

        return true;
    }

    /**
     * @inheritdoc
     */
    public function getList(SearchCriteriaInterface $searchCriteria)
    {
        /** @var Collection $collection */
        $collection = $this->collectionFactory->create();
        $this->collectionProcessor->process($searchCriteria, $collection);

        /** @var CaseSearchResultsInterface $searchResults */
        $searchResults = $this->searchResultsFactory->create();
        $searchResults->setSearchCriteria($searchCriteria);
        $searchResults->setItems($collection->getItems());

        return $searchResults;
    }
}