diff --git a/modules/apigee_edge_teams/src/ParamConverter/TeamAppNameConverter.php b/modules/apigee_edge_teams/src/ParamConverter/TeamAppNameConverter.php index 5e21e565f..73546cbe1 100644 --- a/modules/apigee_edge_teams/src/ParamConverter/TeamAppNameConverter.php +++ b/modules/apigee_edge_teams/src/ParamConverter/TeamAppNameConverter.php @@ -20,6 +20,7 @@ namespace Drupal\apigee_edge_teams\ParamConverter; +use Drupal\apigee_edge\Entity\Storage\AppStorage; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Logger\LoggerChannelInterface; use Drupal\Core\ParamConverter\ParamConverterInterface; @@ -84,7 +85,12 @@ public function convert($value, $definition, $name, array $defaults) { // Load the entity directly from Apigee Edge if needed. // @see \Drupal\apigee_edge\ParamConverter\ApigeeEdgeLoadUnchangedEntity if (!empty($defaults['_route_object']->getOption('apigee_edge_load_unchanged_entity'))) { - $entity = $app_storage->loadUnchanged($app_id); + if ($app_storage instanceof AppStorage) { + $entity = $app_storage->loadUnchangedByUuid($app_id); + } + else { + $entity = $app_storage->loadUnchanged($app_id); + } } else { $entity = $app_storage->load($app_id); diff --git a/src/Entity/Storage/AppStorage.php b/src/Entity/Storage/AppStorage.php index c5b3ad17a..f16d5d89d 100644 --- a/src/Entity/Storage/AppStorage.php +++ b/src/Entity/Storage/AppStorage.php @@ -94,6 +94,30 @@ public function loadUnchanged($id) { return parent::loadUnchanged($id); } + /** + * Load app by UUID. + * + * This function is more efficient than loadUnchanged(), because it does not + * need to cover the case when loading is done by App name. + * + * @param string $uuid + * App UUID. + * + * @return \Drupal\apigee_edge\Entity\AppInterface|null + * The unchanged entity, or NULL if the entity cannot be loaded. + * + * @TODO: this method should be also available in the AppStorageInterface, but + * that would be a breaking change, so we can only add that in the next + * major version of the module. + */ + public function loadUnchangedByUuid(string $uuid): ?AppInterface { + // Clear the app controller's cache if it has one. + if ($this->appController instanceof EntityCacheAwareControllerInterface) { + $this->appController->entityCache()->removeEntities([$uuid]); + } + return parent::loadUnchanged($uuid); + } + /** * {@inheritdoc} */ diff --git a/src/ParamConverter/DeveloperAppNameConverter.php b/src/ParamConverter/DeveloperAppNameConverter.php index 07383a3f4..aad62680b 100644 --- a/src/ParamConverter/DeveloperAppNameConverter.php +++ b/src/ParamConverter/DeveloperAppNameConverter.php @@ -20,6 +20,7 @@ namespace Drupal\apigee_edge\ParamConverter; +use Drupal\apigee_edge\Entity\Storage\AppStorage; use Drupal\apigee_edge\Exception\DeveloperDoesNotExistException; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Logger\LoggerChannelInterface; @@ -87,7 +88,12 @@ public function convert($value, $definition, $name, array $defaults) { // Load the entity directly from Apigee Edge if needed. // @see \Drupal\apigee_edge\ParamConverter\ApigeeEdgeLoadUnchangedEntity if (!empty($defaults['_route_object']->getOption('apigee_edge_load_unchanged_entity'))) { - $entity = $app_storage->loadUnchanged($app_id); + if ($app_storage instanceof AppStorage) { + $entity = $app_storage->loadUnchangedByUuid($app_id); + } + else { + $entity = $app_storage->loadUnchanged($app_id); + } } else { $entity = $app_storage->load($app_id);