|
@@ -7,23 +7,33 @@ use App\Http\Controllers\Controller;
|
|
|
use App\Models\DiscordUser;
|
|
|
use App\Models\User;
|
|
|
use Illuminate\Contracts\Foundation\Application;
|
|
|
+use Illuminate\Contracts\Pagination\LengthAwarePaginator;
|
|
|
use Illuminate\Contracts\Routing\ResponseFactory;
|
|
|
+use Illuminate\Database\Eloquent\Builder;
|
|
|
+use Illuminate\Database\Eloquent\Collection;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Http\Response;
|
|
|
use Illuminate\Validation\Rule;
|
|
|
use Illuminate\Validation\ValidationException;
|
|
|
+use Spatie\QueryBuilder\QueryBuilder;
|
|
|
|
|
|
class UserController extends Controller
|
|
|
{
|
|
|
+ const ALLOWED_INCLUDES = ['servers', 'payments', 'vouchers', 'discordUser'];
|
|
|
+ const ALLOWED_FILTERS = ['email', 'pterodactyl_id', 'role', 'suspended'];
|
|
|
/**
|
|
|
* Display a listing of the resource.
|
|
|
*
|
|
|
* @param Request $request
|
|
|
- * @return Response
|
|
|
+ * @return LengthAwarePaginator
|
|
|
*/
|
|
|
public function index(Request $request)
|
|
|
{
|
|
|
- return User::paginate($request->query('per_page') ?? 50);
|
|
|
+ $query = QueryBuilder::for(User::class)
|
|
|
+ ->allowedIncludes(self::ALLOWED_INCLUDES)
|
|
|
+ ->allowedFilters(self::ALLOWED_FILTERS);
|
|
|
+
|
|
|
+ return $query->paginate($request->input('per_page') ?? 50);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -31,12 +41,22 @@ class UserController extends Controller
|
|
|
* Display the specified resource.
|
|
|
*
|
|
|
* @param int $id
|
|
|
- * @return User
|
|
|
+ * @return User|Collection
|
|
|
*/
|
|
|
public function show(int $id)
|
|
|
{
|
|
|
$discordUser = DiscordUser::find($id);
|
|
|
- return $discordUser ? $discordUser->user : User::findOrFail($id);
|
|
|
+ $user = $discordUser ? $discordUser->user : User::findOrFail($id);
|
|
|
+
|
|
|
+ $query = QueryBuilder::for($user)
|
|
|
+ ->with('discordUser')
|
|
|
+ ->allowedIncludes(self::ALLOWED_INCLUDES)
|
|
|
+ ->where('users.id' , '=' , $id)
|
|
|
+ ->orWhereHas('discordUser' , function (Builder $builder) use ($id) {
|
|
|
+ $builder->where('id' , '=' , $id);
|
|
|
+ });
|
|
|
+
|
|
|
+ return $query->get();
|
|
|
}
|
|
|
|
|
|
|
|
@@ -53,11 +73,11 @@ class UserController extends Controller
|
|
|
$user = $discordUser ? $discordUser->user : User::findOrFail($id);
|
|
|
|
|
|
$request->validate([
|
|
|
- "name" => "sometimes|string|min:4|max:30",
|
|
|
- "email" => "sometimes|string|email",
|
|
|
- "credits" => "sometimes|numeric|min:0|max:1000000",
|
|
|
+ "name" => "sometimes|string|min:4|max:30",
|
|
|
+ "email" => "sometimes|string|email",
|
|
|
+ "credits" => "sometimes|numeric|min:0|max:1000000",
|
|
|
"server_limit" => "sometimes|numeric|min:0|max:1000000",
|
|
|
- "role" => ['sometimes', Rule::in(['admin', 'mod', 'client', 'member'])],
|
|
|
+ "role" => ['sometimes', Rule::in(['admin', 'mod', 'client', 'member'])],
|
|
|
]);
|
|
|
|
|
|
$user->update($request->all());
|
|
@@ -81,23 +101,23 @@ class UserController extends Controller
|
|
|
$user = $discordUser ? $discordUser->user : User::findOrFail($id);
|
|
|
|
|
|
$request->validate([
|
|
|
- "credits" => "sometimes|numeric|min:0|max:1000000",
|
|
|
+ "credits" => "sometimes|numeric|min:0|max:1000000",
|
|
|
"server_limit" => "sometimes|numeric|min:0|max:1000000",
|
|
|
]);
|
|
|
|
|
|
- if($request->credits){
|
|
|
- if ($user->credits + $request->credits >= 99999999) throw ValidationException::withMessages([
|
|
|
+ if ($request->credits) {
|
|
|
+ if ($user->credits + $request->credits >= 99999999) throw ValidationException::withMessages([
|
|
|
'credits' => "You can't add this amount of credits because you would exceed the credit limit"
|
|
|
]);
|
|
|
event(new UserUpdateCreditsEvent($user));
|
|
|
$user->increment('credits', $request->credits);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- if($request->server_limit){
|
|
|
+ if ($request->server_limit) {
|
|
|
if ($user->server_limit + $request->server_limit >= 2147483647) throw ValidationException::withMessages([
|
|
|
'server_limit' => "You cannot add this amount of servers because it would exceed the server limit."
|
|
|
]);
|
|
|
- $user->increment('server_limit', $request->server_limit);
|
|
|
+ $user->increment('server_limit', $request->server_limit);
|
|
|
}
|
|
|
|
|
|
return $user;
|
|
@@ -117,22 +137,22 @@ class UserController extends Controller
|
|
|
$user = $discordUser ? $discordUser->user : User::findOrFail($id);
|
|
|
|
|
|
$request->validate([
|
|
|
- "credits" => "sometimes|numeric|min:0|max:1000000",
|
|
|
+ "credits" => "sometimes|numeric|min:0|max:1000000",
|
|
|
"server_limit" => "sometimes|numeric|min:0|max:1000000",
|
|
|
]);
|
|
|
|
|
|
- if($request->credits){
|
|
|
- if($user->credits - $request->credits < 0) throw ValidationException::withMessages([
|
|
|
+ if ($request->credits) {
|
|
|
+ if ($user->credits - $request->credits < 0) throw ValidationException::withMessages([
|
|
|
'credits' => "You can't remove this amount of credits because you would exceed the minimum credit limit"
|
|
|
]);
|
|
|
$user->decrement('credits', $request->credits);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- if($request->server_limit){
|
|
|
- if($user->server_limit - $request->server_limit < 0) throw ValidationException::withMessages([
|
|
|
+ if ($request->server_limit) {
|
|
|
+ if ($user->server_limit - $request->server_limit < 0) throw ValidationException::withMessages([
|
|
|
'server_limit' => "You cannot remove this amount of servers because it would exceed the minimum server."
|
|
|
]);
|
|
|
- $user->decrement('server_limit', $request->server_limit);
|
|
|
+ $user->decrement('server_limit', $request->server_limit);
|
|
|
}
|
|
|
|
|
|
return $user;
|