From fc2d97218323181c0ab5652fa409e03c501e3d7f Mon Sep 17 00:00:00 2001 From: AVMG20 Date: Tue, 13 Jul 2021 21:33:08 +0200 Subject: [PATCH 1/2] Fixed a bug where deleting a user wouldn't delete the linked discord acc --- app/Models/User.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Models/User.php b/app/Models/User.php index ff4b4df6..a4f68ec4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -107,6 +107,8 @@ class User extends Authenticatable implements MustVerifyEmail $user->vouchers()->detach(); + $user->discordUser()->delete(); + Pterodactyl::client()->delete("/application/users/{$user->pterodactyl_id}"); }); } From 4d0c9deab9c5f7f51cd3ff8cef89b12723c05666 Mon Sep 17 00:00:00 2001 From: AVMG20 Date: Thu, 15 Jul 2021 22:16:26 +0200 Subject: [PATCH 2/2] added voucher api --- .../Controllers/Admin/VoucherController.php | 3 +- .../Controllers/Api/VoucherController.php | 134 ++++++++++++++++++ app/Models/Voucher.php | 17 +++ routes/api.php | 4 + 4 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/Api/VoucherController.php diff --git a/app/Http/Controllers/Admin/VoucherController.php b/app/Http/Controllers/Admin/VoucherController.php index 8aaab14f..e1a71580 100644 --- a/app/Http/Controllers/Admin/VoucherController.php +++ b/app/Http/Controllers/Admin/VoucherController.php @@ -176,8 +176,7 @@ class VoucherController extends Controller return '' . $voucher->getStatus() . ''; }) ->editColumn('uses', function (Voucher $voucher) { - $userCount = $voucher->users()->count(); - return "{$userCount} / {$voucher->uses}"; + return "{$voucher->used} / {$voucher->uses}"; }) ->editColumn('credits', function (Voucher $voucher) { return number_format($voucher->credits, 2, '.', ''); diff --git a/app/Http/Controllers/Api/VoucherController.php b/app/Http/Controllers/Api/VoucherController.php new file mode 100644 index 00000000..9b70277f --- /dev/null +++ b/app/Http/Controllers/Api/VoucherController.php @@ -0,0 +1,134 @@ +query('per_page') ?? 50); + } + + /** + * Show the form for creating a new resource. + * + * @return Response + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + * + * @param Request $request + * @return Response + */ + public function store(Request $request) + { + $request->validate([ + 'memo' => 'nullable|string|max:191', + 'code' => 'required|string|alpha_dash|max:36|min:4', + 'uses' => 'required|numeric|max:2147483647|min:1', + 'credits' => 'required|numeric|between:0,99999999', + 'expires_at' => 'nullable|date_format:d-m-Y|after:today|before:10 years' + ]); + + return Voucher::create($request->all()); + } + + /** + * Display the specified resource. + * + * @param int $id + * @return Response + */ + public function show(int $id) + { + return Voucher::findOrFail($id); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return Response + */ + public function edit($id) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param Request $request + * @param int $id + * @return Response + */ + public function update(Request $request, int $id) + { + $voucher = Voucher::findOrFail($id); + + $request->validate([ + 'memo' => 'nullable|string|max:191', + 'code' => 'required|string|alpha_dash|max:36|min:4', + 'uses' => 'required|numeric|max:2147483647|min:1', + 'credits' => 'required|numeric|between:0,99999999', + 'expires_at' => 'nullable|date_format:d-m-Y|after:today|before:10 years' + ]); + + $voucher->update($request->all()); + + return $voucher; + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return Response + */ + public function destroy(int $id) + { + $voucher = Voucher::findOrFail($id); + $voucher->delete(); + return $voucher; + } + + + /** + * get linked users + * @param Request $request + * @param Voucher $voucher + * @return LengthAwarePaginator + */ + public function users(Request $request, Voucher $voucher){ + $request->validate([ + 'include' => [ + 'nullable', + 'string', + Rule::in(['discorduser']), + ] + ]); + + if($request->input('include') == 'discorduser'){ + return $voucher->users()->with('discordUser')->paginate($request->query('per_page') ?? 50); + } + + return $voucher->users()->paginate($request->query('per_page') ?? 50); + } +} diff --git a/app/Models/Voucher.php b/app/Models/Voucher.php index bc267c5e..bff3e215 100644 --- a/app/Models/Voucher.php +++ b/app/Models/Voucher.php @@ -31,6 +31,23 @@ class Voucher extends Model 'expires_at' ]; + protected $appends = ['used' , 'status']; + + /** + * @return int + */ + public function getUsedAttribute() + { + return $this->users()->count(); + } + + /** + * @return string + */ + public function getStatusAttribute(){ + return $this->getStatus(); + } + /** * */ diff --git a/routes/api.php b/routes/api.php index eaa0ee99..5ffa4d9d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,6 +2,7 @@ use App\Http\Controllers\Api\ServerController; use App\Http\Controllers\Api\UserController; +use App\Http\Controllers\Api\VoucherController; use Illuminate\Support\Facades\Route; /* @@ -21,6 +22,9 @@ Route::middleware('api.token')->group(function () { Route::patch('/servers/{server}/suspend', [ServerController::class, 'suspend']); Route::patch('/servers/{server}/unsuspend', [ServerController::class, 'unSuspend']); Route::resource('servers', ServerController::class)->except(['store', 'create', 'edit', 'update']); + +// Route::get('/vouchers/{voucher}/users' , [VoucherController::class , 'users']); + Route::resource('vouchers', VoucherController::class)->except('create' , 'edit'); });