forked from Ctrlpanel-gg/panel
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathServerController.php
More file actions
118 lines (98 loc) · 3.07 KB
/
Copy pathServerController.php
File metadata and controls
118 lines (98 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Server;
use Exception;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Spatie\QueryBuilder\QueryBuilder;
class ServerController extends Controller
{
public const ALLOWED_INCLUDES = ['product', 'user'];
public const ALLOWED_FILTERS = ['name', 'suspended', 'identifier', 'pterodactyl_id', 'user_id', 'product_id'];
/**
* Display a listing of the resource.
*
* @param Request $request
* @return LengthAwarePaginator
*/
public function index(Request $request)
{
$query = QueryBuilder::for(Server::class)
->allowedIncludes(self::ALLOWED_INCLUDES)
->allowedFilters(self::ALLOWED_FILTERS);
return $query->paginate($request->input('per_page') ?? 50);
}
/**
* Display the specified resource.
*
* @param Server $server
* @return Server|Collection|Model
*/
public function show(Server $server)
{
$query = QueryBuilder::for(Server::class)
->where('id', '=', $server->id)
->allowedIncludes(self::ALLOWED_INCLUDES);
return $query->firstOrFail();
}
/**
* Remove the specified resource from storage.
*
* @param Request $request
* @param Server $server
* @return Server
*/
public function destroy(Request $request, Server $server)
{
$request->validate([
'reason' => 'sometimes|string|max:320',
]);
// Reason is captured by the model's activity log (tapActivity) — no local use required here.
$server->delete();
return $server;
}
/**
* suspend server
*
* @param Request $request
* @param Server $server
* @return Server|JsonResponse
*/
public function suspend(Request $request, Server $server)
{
$request->validate([
'reason' => 'sometimes|string|max:320',
]);
// Reason is captured by the model's activity log (tapActivity) — no local use required here.
try {
$server->suspend();
} catch (Exception $exception) {
return response()->json(['message' => $exception->getMessage()], 500);
}
return $server->load('product');
}
/**
* unsuspend server
*
* @param Request $request
* @param Server $server
* @return Server|JsonResponse
*/
public function unSuspend(Request $request, Server $server)
{
$request->validate([
'reason' => 'sometimes|string|max:320',
]);
// Reason is captured by the model's activity log (tapActivity) — no local use required here.
try {
$server->unSuspend();
} catch (Exception $exception) {
return response()->json(['message' => $exception->getMessage()], 500);
}
return $server->load('product');
}
}