From 751b23a5e4d932f1be8e523a7e186767df773b81 Mon Sep 17 00:00:00 2001 From: Attila Kerekes Date: Sun, 11 Dec 2022 00:31:30 +0100 Subject: [PATCH] feat: Add health endpoint --- app/Http/Controllers/HealthController.php | 58 +++++++++++++++++++++++ routes/web.php | 3 ++ 2 files changed, 61 insertions(+) create mode 100644 app/Http/Controllers/HealthController.php diff --git a/app/Http/Controllers/HealthController.php b/app/Http/Controllers/HealthController.php new file mode 100644 index 000000000..e6ddcc42f --- /dev/null +++ b/app/Http/Controllers/HealthController.php @@ -0,0 +1,58 @@ +where('deleted_at', null) + ->where('type', '0') + ->count(); + } + + /** + * Handle the incoming request. + * + * @param Request $request + * @return JsonResponse|Response + * @throws BindingResolutionException + */ + public function __invoke(Request $request) + { + $REQUESTS_MAX_PER_MIN = 30; + $STATUS_TOO_MANY_REQUESTS = 429; + + if (RateLimiter::remaining('health', $REQUESTS_MAX_PER_MIN) < 1) { + return response()->make('Too many attempts.', $STATUS_TOO_MANY_REQUESTS); + } + + RateLimiter::hit('health'); + + return response()->json([ + 'status' => 'ok', + 'items' => self::getItems(), + 'users' => self::getUsers(), + ]); + } +} diff --git a/routes/web.php b/routes/web.php index e9c7ab31f..55a707690 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,6 +2,7 @@ use App\Application; use App\Http\Controllers\Auth\LoginController; +use App\Http\Controllers\HealthController; use App\Http\Controllers\HomeController; use App\Http\Controllers\ImportController; use App\Http\Controllers\ItemController; @@ -111,3 +112,5 @@ Route::resource('api/item', ItemRestController::class); Route::get('import', ImportController::class)->name('items.import'); + +Route::get('/health', HealthController::class)->name('health');