diff --git a/.gitignore b/.gitignore index 2896e86..9b40da9 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Homestead.json Homestead.yaml .env .phpunit.result.cache +*.env.local \ No newline at end of file diff --git a/app/Data/ItemsCollection.php b/app/Data/ItemsCollection.php index 63669dc..fb3e423 100644 --- a/app/Data/ItemsCollection.php +++ b/app/Data/ItemsCollection.php @@ -47,7 +47,7 @@ class ItemsCollection $test = collect([$trimmed_current_locale_name => json_decode(file_get_contents("${raw_locales_global_base_url}/${trimmed_current_locale_name}.json"), true)['templates']]); $this->locales = $this->locales->merge($test); } - Cache::set($this->locales_cache_key, $this->locales); + Cache::put($this->locales_cache_key, $this->locales); } public function refreshItemsCache(): void { @@ -55,6 +55,10 @@ class ItemsCollection Cache::put($this->items_cache_key, $this->items); } + public function getLocales(): Collection { + return $this->locales->keys(); + } + public function refreshAllCache(): void { $this->refreshItemsCache(); $this->refreshLocalesCache(); diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php index eef62e7..454aa97 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -23,12 +23,13 @@ class ItemController extends Controller /** * @param Request $request + * @param string $locale * @return JsonResponse */ - public function search(Request $request): JsonResponse + public function search(Request $request, string $locale = 'en'): JsonResponse { $status = Response::HTTP_NO_CONTENT; - $result = $this->itemsCollection->findItem($request->input('query')); + $result = $this->itemsCollection->findItem($request->input('query'), $locale); $response = []; if ($result->isNotEmpty()) { $status = Response::HTTP_OK; @@ -41,12 +42,13 @@ class ItemController extends Controller /** * @param string $id + * @param string $locale * @return JsonResponse */ - public function getItem(string $id): JsonResponse + public function getItem(string $id, string $locale = 'en'): JsonResponse { try { - return response()->json($this->itemsCollection->getItemById($id)); + return response()->json($this->itemsCollection->getItemById($id, $locale)); } catch (Throwable $exception) { Log::error($exception->getMessage()); Log::error($exception->getTraceAsString()); @@ -57,19 +59,32 @@ class ItemController extends Controller } /** - * @param string $id * @return JsonResponse */ - public function refreshItems(): JsonResponse + public function getLocales(): JsonResponse { try { - return response()->json($this->itemsCollection->getItemById($id)); + return response()->json($this->itemsCollection->getLocales()); } catch (Throwable $exception) { Log::error($exception->getMessage()); Log::error($exception->getTraceAsString()); return response()->json([ - 'error' => 'Item not found.', + 'error' => 'No locale not found.', ], Response::HTTP_NOT_FOUND); } } + + /** + * @param string $id + * @return JsonResponse + */ + public function refreshAllCache(): JsonResponse + { + try { + return response()->json($this->itemsCollection->refreshAllCache()); + } catch (Throwable $exception) { + Log::error($exception->getMessage()); + Log::error($exception->getTraceAsString()); + } + } } diff --git a/routes/web.php b/routes/web.php index 7638465..0d973be 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,8 +17,10 @@ $router->get('/', function () { return view('app'); }); +$router->get('/api/locales', 'ItemController@getLocales'); $router->get('/api/refresh', 'ItemController@refreshAllCache'); -$router->post('/api/{locale}/search', 'ItemController@search'); -$router->get('/api/item/{locale}/{id}', 'ItemController@getItem'); -$router->post('/api/search', 'ItemController@search'); + +$router->get('/api/item/{id}/{locale}', 'ItemController@getItem'); $router->get('/api/item/{id}', 'ItemController@getItem'); +$router->post('/api/search/{locale?}', 'ItemController@search'); +$router->post('/api/search', 'ItemController@search');