diff --git a/app/Http/Controllers/Api/V1/SiteController.php b/app/Http/Controllers/Api/V1/SiteController.php new file mode 100644 index 0000000..1a7351a --- /dev/null +++ b/app/Http/Controllers/Api/V1/SiteController.php @@ -0,0 +1,87 @@ +string('url'); + $key = $request->string('key'); + + if ($url->isEmpty() && $key->isEmpty()) { + return $this->error('BadRequest'); + } + + $connectionService = new Connection($url, $key); + + // Do a health check + try { + $healthResponse = $connectionService->checkHealth(); + } catch (ServerException $e) { + return $this->error($e->getMessage(), 500); + } catch (ClientException|\Exception $e) { + return $this->error($e->getMessage()); + } + + // If successful save site + $site = new Site(); + + $site->key = $key; + $site->url = $url; + $site->last_seen = Carbon::now(); + + // Fill with site info + $site->fill($healthResponse->toArray()); + + $site->save(); + + CheckSiteHealth::dispatch($site); + + return $this->ok(); + } + + /** + * @param Request $request + * + * @return JsonResponse + */ + public function check(Request $request): JsonResponse + { + return response()->json(['check']); + } + + /** + * @param Request $request + * + * @return JsonResponse + */ + public function delete(Request $request): JsonResponse + { + return response()->json(['delete']); + } +} diff --git a/app/Traits/ApiResponse.php b/app/Traits/ApiResponse.php new file mode 100644 index 0000000..a619d73 --- /dev/null +++ b/app/Traits/ApiResponse.php @@ -0,0 +1,57 @@ +success($message, 200); + } + + /** + * @param string $message + * @param int $statusCode + * + * @return JsonResponse + */ + protected function success(string $message, int $statusCode = 200): JsonResponse + { + return $this->response($message, $statusCode); + } + + /** + * @param string $message + * @param int $statusCode + * + * @return JsonResponse + */ + protected function error(string $message, int $statusCode = 400): JsonResponse + { + return $this->response($message, $statusCode); + } + + /** + * @param string $message + * @param int $statusCode + * + * @return JsonResponse + */ + protected function response(string $message, int $statusCode = 200): JsonResponse + { + return response()->json([ + 'message' => $message, + 'status' => $statusCode + ], $statusCode); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 36e7dd8..0be620c 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -7,6 +7,7 @@ return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..ac53a95 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,12 @@ +group(function () { + Route::controller(SiteController::class)->group(function () { + Route::get('register', 'register'); + Route::get('check/{hase}', 'check'); + Route::delete('delete/{hash}', 'delete'); + }); +});