<?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\Http\JsonResponse; use Illuminate\Http\Request; use Spatie\QueryBuilder\QueryBuilder; class ServerController extends Controller { const ALLOWED_INCLUDES = ['product', 'user']; 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 */ public function show(Server $server) { $query = QueryBuilder::for(Server::class) ->where('id' ,'=' , $server->id) ->allowedIncludes(self::ALLOWED_INCLUDES); return $query->get(); } /** * Remove the specified resource from storage. * * @param Server $server * @return Server */ public function destroy(Server $server) { $server->delete(); return $server; } /** * suspend server * @param Server $server * @return Server|JsonResponse */ public function suspend(Server $server) { try { $server->suspend(); } catch (Exception $exception) { return response()->json(['message' => $exception->getMessage()], 500); } return $server->load('product'); } /** * unsuspend server * @param Server $server * @return Server|JsonResponse */ public function unSuspend(Server $server) { try { $server->unSuspend(); } catch (Exception $exception) { return response()->json(['message' => $exception->getMessage()], 500); } return $server->load('product'); } }