importService !== null) { return $this->importService; } $profiles = [ 'users' => new UserImportProfile(new UserImportGateway( $this->userServicesFactory->createUserReadRepository(), $this->userServicesFactory->createUserAccountService(), $this->directoryServicesFactory->createTenantRepository(), $this->directoryServicesFactory->createRoleRepository(), $this->directoryServicesFactory->createDepartmentRepository(), )), 'departments' => new DepartmentImportProfile(new DepartmentImportGateway( $this->directoryServicesFactory->createDepartmentRepository(), $this->directoryServicesFactory->createTenantRepository(), $this->directoryServicesFactory->createDepartmentService() )), ]; return $this->importService = new ImportService( $this->getCsvReaderService(), $this->getImportTempFileService(), $this->createImportAuditService(), $this->createImportStateStoreService(), $profiles, $this->createPermissionGateway(), $this->createSettingGateway(), $this->userServicesFactory->createUserScopeGateway() ); } public function createImportAuditService(): ImportAuditService { return $this->importAuditService ??= new ImportAuditService($this->getImportAuditRunRepository()); } public function createImportStateStoreService(): ImportStateStoreService { return $this->importStateStoreService ??= new ImportStateStoreService($this->getImportTempFileService()); } private function getCsvReaderService(): CsvReaderService { return $this->csvReaderService ??= new CsvReaderService(); } private function getImportTempFileService(): ImportTempFileService { return $this->importTempFileService ??= new ImportTempFileService(); } private function getImportAuditRunRepository(): ImportAuditRunRepositoryInterface { return $this->importRepositoryFactory->createImportAuditRunRepository(); } private function createPermissionGateway(): PermissionGateway { return $this->permissionGateway ??= $this->accessServicesFactory->createPermissionGateway(); } private function createSettingGateway(): SettingGateway { return $this->settingGateway ??= $this->settingServicesFactory->createSettingGateway(); } }