From 8b9790417d5d4d17b6b0a9af7935fac848d9b448 Mon Sep 17 00:00:00 2001 From: zebardy Date: Sat, 23 Nov 2019 14:38:37 +0000 Subject: [PATCH] lazy loading of open api spec --- controllers/BaseApiController.php | 12 +++++++++-- controllers/GenericEntityApiController.php | 4 ++-- controllers/OpenApiController.php | 8 ++++---- controllers/StockController.php | 23 +++++++++++++++------- services/UserfieldsService.php | 16 +++++++++++---- 5 files changed, 44 insertions(+), 19 deletions(-) diff --git a/controllers/BaseApiController.php b/controllers/BaseApiController.php index 9d023361..cd61776c 100644 --- a/controllers/BaseApiController.php +++ b/controllers/BaseApiController.php @@ -8,10 +8,18 @@ class BaseApiController extends BaseController public function __construct(\Slim\Container $container) { parent::__construct($container); - $this->OpenApiSpec = json_decode(file_get_contents(__DIR__ . '/../grocy.openapi.json')); } - protected $OpenApiSpec; + protected $OpenApiSpec = null; + + protected function getOpenApispec() + { + if($this->OpenApiSpec == null) + { + $this->OpenApiSpec = json_decode(file_get_contents(__DIR__ . '/../grocy.openapi.json')); + } + return $this->OpenApiSpec; + } protected function ApiResponse($data) { diff --git a/controllers/GenericEntityApiController.php b/controllers/GenericEntityApiController.php index 122242b4..99c563c9 100644 --- a/controllers/GenericEntityApiController.php +++ b/controllers/GenericEntityApiController.php @@ -166,11 +166,11 @@ class GenericEntityApiController extends BaseApiController private function IsValidEntity($entity) { - return in_array($entity, $this->OpenApiSpec->components->internalSchemas->ExposedEntity->enum); + return in_array($entity, $this->getOpenApiSpec()->components->internalSchemas->ExposedEntity->enum); } private function IsEntityWithPreventedListing($entity) { - return in_array($entity, $this->OpenApiSpec->components->internalSchemas->ExposedEntitiesPreventListing->enum); + return in_array($entity, $this->getOpenApiSpec()->components->internalSchemas->ExposedEntitiesPreventListing->enum); } } diff --git a/controllers/OpenApiController.php b/controllers/OpenApiController.php index 2bbd7819..10c7a42a 100644 --- a/controllers/OpenApiController.php +++ b/controllers/OpenApiController.php @@ -25,11 +25,11 @@ class OpenApiController extends BaseApiController $applicationService = $this->getApplicationService; $versionInfo = $applicationService->GetInstalledVersion(); - $this->OpenApiSpec->info->version = $versionInfo->Version; - $this->OpenApiSpec->info->description = str_replace('PlaceHolderManageApiKeysUrl', $this->AppContainer->UrlManager->ConstructUrl('/manageapikeys'), $this->OpenApiSpec->info->description); - $this->OpenApiSpec->servers[0]->url = $this->AppContainer->UrlManager->ConstructUrl('/api'); + $this->getOpenApiSpec()->info->version = $versionInfo->Version; + $this->getOpenApiSpec()->info->description = str_replace('PlaceHolderManageApiKeysUrl', $this->AppContainer->UrlManager->ConstructUrl('/manageapikeys'), $this->getOpenApiSpec()->info->description); + $this->getOpenApiSpec()->servers[0]->url = $this->AppContainer->UrlManager->ConstructUrl('/api'); - return $this->ApiResponse($this->OpenApiSpec); + return $this->ApiResponse($this->getOpenApiSpec()); } public function ApiKeysList(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) diff --git a/controllers/StockController.php b/controllers/StockController.php index 3582b2f9..7deea999 100644 --- a/controllers/StockController.php +++ b/controllers/StockController.php @@ -15,10 +15,19 @@ class StockController extends BaseController #fwrite($fp, "!!!constructing StockController\n"); #fclose($fp); parent::__construct($container); - $this->StockService = new StockService(); + #$this->StockService = new StockService(); } - protected $StockService; + protected $StockService = null; + + protected function getStockService() + { + if($this->StockService == null) + { + $this->StockService = new StockService(); + } + return $this->StockService; + } public function Overview(\Slim\Http\Request $request, \Slim\Http\Response $response, array $args) { @@ -29,9 +38,9 @@ class StockController extends BaseController 'products' => $this->getDatabase()->products()->orderBy('name'), 'quantityunits' => $this->getDatabase()->quantity_units()->orderBy('name'), 'locations' => $this->getDatabase()->locations()->orderBy('name'), - 'currentStock' => $this->StockService->GetCurrentStock(true), - 'currentStockLocations' => $this->StockService->GetCurrentStockLocations(), - 'missingProducts' => $this->StockService->GetMissingProducts(), + 'currentStock' => $this->getStockService()->GetCurrentStock(true), + 'currentStockLocations' => $this->getStockService()->GetCurrentStockLocations(), + 'missingProducts' => $this->getStockService()->GetMissingProducts(), 'nextXDays' => $nextXDays, 'productGroups' => $this->getDatabase()->product_groups()->orderBy('name'), 'userfields' => $this->getUserfieldsService()->GetFields('products'), @@ -81,7 +90,7 @@ class StockController extends BaseController 'listItems' => $this->getDatabase()->shopping_list()->where('shopping_list_id = :1', $listId), 'products' => $this->getDatabase()->products()->orderBy('name'), 'quantityunits' => $this->getDatabase()->quantity_units()->orderBy('name'), - 'missingProducts' => $this->StockService->GetMissingProducts(), + 'missingProducts' => $this->getStockService()->GetMissingProducts(), 'productGroups' => $this->getDatabase()->product_groups()->orderBy('name'), 'shoppingLists' => $this->getDatabase()->shopping_lists()->orderBy('name'), 'selectedShoppingListId' => $listId, @@ -289,7 +298,7 @@ class StockController extends BaseController 'products' => $this->getDatabase()->products()->orderBy('name'), 'quantityunits' => $this->getDatabase()->quantity_units()->orderBy('name'), 'locations' => $this->getDatabase()->locations()->orderBy('name'), - 'currentStockLocationContent' => $this->StockService->GetCurrentStockLocationContent() + 'currentStockLocationContent' => $this->getStockService()->GetCurrentStockLocationContent() ]); } diff --git a/services/UserfieldsService.php b/services/UserfieldsService.php index 619bc602..e2d51e0f 100644 --- a/services/UserfieldsService.php +++ b/services/UserfieldsService.php @@ -18,11 +18,19 @@ class UserfieldsService extends BaseService public function __construct() { parent::__construct(); - $this->OpenApiSpec = json_decode(file_get_contents(__DIR__ . '/../grocy.openapi.json')); } - protected $OpenApiSpec; - + protected $OpenApiSpec = null; + + protected function getOpenApispec() + { + if($this->OpenApiSpec == null) + { + $this->OpenApiSpec = json_decode(file_get_contents(__DIR__ . '/../grocy.openapi.json')); + } + return $this->OpenApiSpec; + } + public function GetFields($entity) { if (!$this->IsValidEntity($entity)) @@ -109,7 +117,7 @@ class UserfieldsService extends BaseService public function GetEntities() { - $exposedDefaultEntities = $this->OpenApiSpec->components->internalSchemas->ExposedEntity->enum; + $exposedDefaultEntities = $this->getOpenApiSpec()->components->internalSchemas->ExposedEntity->enum; $userentities = array(); foreach ($this->Database->userentities()->orderBy('name') as $userentity)