Skip to content

Commit 701344e

Browse files
rdeutzSniperSister
andauthored
base and register (#3)
* base and register * fix cs and phpstan * remove package * type check * Fix cs * deduplicate calls * move base dto * save site * stan fix * types * fix nullable error on write * push last_seen --------- Co-authored-by: David Jardin <[email protected]>
1 parent ebe5920 commit 701344e

File tree

4 files changed

+157
-0
lines changed

4 files changed

+157
-0
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Api\V1;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Jobs\CheckSiteHealth;
7+
use App\Models\Site;
8+
use App\RemoteSite\Connection;
9+
use App\Traits\ApiResponse;
10+
use Carbon\Carbon;
11+
use GuzzleHttp\Exception\ClientException;
12+
use GuzzleHttp\Exception\ServerException;
13+
use Illuminate\Http\JsonResponse;
14+
use Illuminate\Http\Request;
15+
16+
/**
17+
* Class SiteController
18+
* @package App\Http\Controllers\Api\V1
19+
* @since 1.0
20+
*/
21+
class SiteController extends Controller
22+
{
23+
use ApiResponse;
24+
25+
/**
26+
* @param Request $request
27+
*
28+
* @return JsonResponse
29+
* @throws \Exception
30+
*/
31+
public function register(Request $request): JsonResponse
32+
{
33+
$url = $request->string('url');
34+
$key = $request->string('key');
35+
36+
if ($url->isEmpty() && $key->isEmpty()) {
37+
return $this->error('BadRequest');
38+
}
39+
40+
$connectionService = new Connection($url, $key);
41+
42+
// Do a health check
43+
try {
44+
$healthResponse = $connectionService->checkHealth();
45+
} catch (ServerException $e) {
46+
return $this->error($e->getMessage(), 500);
47+
} catch (ClientException|\Exception $e) {
48+
return $this->error($e->getMessage());
49+
}
50+
51+
// If successful save site
52+
$site = new Site();
53+
54+
$site->key = $key;
55+
$site->url = $url;
56+
$site->last_seen = Carbon::now();
57+
58+
// Fill with site info
59+
$site->fill($healthResponse->toArray());
60+
61+
$site->save();
62+
63+
CheckSiteHealth::dispatch($site);
64+
65+
return $this->ok();
66+
}
67+
68+
/**
69+
* @param Request $request
70+
*
71+
* @return JsonResponse
72+
*/
73+
public function check(Request $request): JsonResponse
74+
{
75+
return response()->json(['check']);
76+
}
77+
78+
/**
79+
* @param Request $request
80+
*
81+
* @return JsonResponse
82+
*/
83+
public function delete(Request $request): JsonResponse
84+
{
85+
return response()->json(['delete']);
86+
}
87+
}

app/Traits/ApiResponse.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace App\Traits;
4+
5+
use Illuminate\Http\JsonResponse;
6+
7+
/**
8+
* Api Response
9+
*/
10+
trait ApiResponse
11+
{
12+
/**
13+
* @param string $message
14+
*
15+
* @return JsonResponse
16+
*/
17+
protected function ok(string $message = 'OK'): JsonResponse
18+
{
19+
return $this->success($message, 200);
20+
}
21+
22+
/**
23+
* @param string $message
24+
* @param int $statusCode
25+
*
26+
* @return JsonResponse
27+
*/
28+
protected function success(string $message, int $statusCode = 200): JsonResponse
29+
{
30+
return $this->response($message, $statusCode);
31+
}
32+
33+
/**
34+
* @param string $message
35+
* @param int $statusCode
36+
*
37+
* @return JsonResponse
38+
*/
39+
protected function error(string $message, int $statusCode = 400): JsonResponse
40+
{
41+
return $this->response($message, $statusCode);
42+
}
43+
44+
/**
45+
* @param string $message
46+
* @param int $statusCode
47+
*
48+
* @return JsonResponse
49+
*/
50+
protected function response(string $message, int $statusCode = 200): JsonResponse
51+
{
52+
return response()->json([
53+
'message' => $message,
54+
'status' => $statusCode
55+
], $statusCode);
56+
}
57+
}

bootstrap/app.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
return Application::configure(basePath: dirname(__DIR__))
88
->withRouting(
99
web: __DIR__.'/../routes/web.php',
10+
api: __DIR__.'/../routes/api.php',
1011
commands: __DIR__.'/../routes/console.php',
1112
health: '/up',
1213
)

routes/api.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
use App\Http\Controllers\Api\V1\SiteController;
4+
use Illuminate\Support\Facades\Route;
5+
6+
Route::prefix('v1')->group(function () {
7+
Route::controller(SiteController::class)->group(function () {
8+
Route::get('register', 'register');
9+
Route::get('check/{hase}', 'check');
10+
Route::delete('delete/{hash}', 'delete');
11+
});
12+
});

0 commit comments

Comments
 (0)