Files
shipping-portal/app/Classes/Modules/Companies/Processors/CreateCompanyModuleProcessor.php
T
2021-08-03 01:17:54 +08:00

63 lines
2.2 KiB
PHP

<?php
namespace App\Classes\Modules\Companies\Processors;
use App\Classes\Modules\Unity\Processors\CreateEntityProcessor;
use App\Classes\Modules\Unity\Processors\CreateEntitySignatureProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject;
use App\Classes\Modules\Companies\Services\CreatesCompanyModule;
use App\Classes\Modules\Companies\Standards\Rules\CanCreateCompanyModule;
use App\Classes\ValueObjects\Constants\BusinessType;
use Illuminate\Database\Eloquent\Model;
use App\Models\Company;
class CreateCompanyModuleProcessor
{
/** @var CreatesCompanyModule */
private $createsCompanyModule;
private $createUnityEntityProcessor;
private $canCreateCompanyModule;
private $createEntityProcessor;
private $createUnityEntitySignatureProcessor;
/**
* CreateCompanyModuleProcessor constructor.
* @param CreatesCompanyModule $createsCompanyModule
*/
public function __construct(CanCreateCompanyModule $canCreateCompanyModule, CreatesCompanyModule $createsCompanyModule, CreateEntityProcessor $createUnityEntityProcessor, CreateEntitySignatureProcessor $createUnityEntitySignatureProcessor)
{
$this->createsCompanyModule = $createsCompanyModule;
$this->createUnityEntityProcessor = $createUnityEntityProcessor;
$this->canCreateCompanyModule = $canCreateCompanyModule;
$this->createUnityEntitySignatureProcessor = $createUnityEntitySignatureProcessor;
}
/**
* @param Company $company
* @return Model
*/
public function execute(Company $company , ?int $businessType): Model
{
$unityEntity = $this->createUnityEntityProcessor->execute($company->name);
$unityEntitySignature = $this->createUnityEntitySignatureProcessor->execute($unityEntity->hash_id);
$company_module_object = new CompanyModuleObject(
$company->id,
$businessType??BusinessType::IMPORTER,
$company->status,
$unityEntity->hash_id,
$unityEntitySignature->hash_id,
);
$this->canCreateCompanyModule->passes($company_module_object);
return $this->createsCompanyModule->execute($company_module_object);
}
}