canCreateCompany = $canCreateCompany; $this->createsCompany = $createsCompany; $this->generatesUniqueAccountNumber = $generatesUniqueAccountNumber; } /** * @param string $name * @param int $companyType * @param int|null $status * @return Model * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\MalformedRequestException * @throws \App\Classes\Exceptions\RequestValidationException */ public function execute(string $name, int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model { $company_object = new CompanyObject($name, $this->generatesUniqueAccountNumber->execute(), $companyType, $status); $this->canCreateCompany->passes($company_object); return $this->createsCompany->execute($company_object); } }