refactor: extract validation logic into FormRequests for verification and push subscription controllers

This commit is contained in:
Yoga Pangestu 2026-06-22 12:00:46 +07:00
parent 3e5ffef2d8
commit 60142c5aa8
5 changed files with 91 additions and 23 deletions

View File

@ -4,6 +4,8 @@
use App\Http\Controllers\Concerns\FlashesEntityMessage; use App\Http\Controllers\Concerns\FlashesEntityMessage;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Manage\ApproveVerificationRequest;
use App\Http\Requests\Admin\Manage\RejectVerificationRequest;
use App\Models\Cutting; use App\Models\Cutting;
use App\Services\Manage\StockService; use App\Services\Manage\StockService;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
@ -28,16 +30,12 @@ public function index(Request $request): Response
]); ]);
} }
public function approve(Request $request, Cutting $cutting): RedirectResponse public function approve(ApproveVerificationRequest $request, Cutting $cutting): RedirectResponse
{ {
$request->validate([
'approval_note' => ['nullable', 'string', 'max:500'],
]);
$this->stockService->approveVerification( $this->stockService->approveVerification(
$cutting, $cutting,
$request->user(), $request->user(),
$request->input('approval_note'), $request->validated('approval_note'),
); );
$this->flashSuccess('Verifikasi berhasil disetujui. Stok produk telah ditambahkan ke toko.'); $this->flashSuccess('Verifikasi berhasil disetujui. Stok produk telah ditambahkan ke toko.');
@ -45,16 +43,12 @@ public function approve(Request $request, Cutting $cutting): RedirectResponse
return redirect()->route('admin.manage.owner-verifications.index'); return redirect()->route('admin.manage.owner-verifications.index');
} }
public function reject(Request $request, Cutting $cutting): RedirectResponse public function reject(RejectVerificationRequest $request, Cutting $cutting): RedirectResponse
{ {
$request->validate([
'reason' => ['required', 'string', 'max:500'],
]);
$this->stockService->rejectVerification( $this->stockService->rejectVerification(
$cutting, $cutting,
$request->user(), $request->user(),
$request->input('reason'), $request->validated('reason'),
); );
$this->flashSuccess('Verifikasi berhasil ditolak.'); $this->flashSuccess('Verifikasi berhasil ditolak.');

View File

@ -2,20 +2,16 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Requests\PushSubscriptionRequest;
use App\Models\PushSubscription; use App\Models\PushSubscription;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class PushSubscriptionController extends Controller class PushSubscriptionController extends Controller
{ {
public function store(Request $request): JsonResponse public function store(PushSubscriptionRequest $request): JsonResponse
{ {
$validated = $request->validate([ $validated = $request->validated();
'endpoint' => ['required', 'string', 'url'],
'publicKey' => ['required', 'string'],
'authToken' => ['required', 'string'],
]);
PushSubscription::updateOrCreate( PushSubscription::updateOrCreate(
[ [
@ -31,11 +27,9 @@ public function store(Request $request): JsonResponse
return response()->json(['message' => 'Subscription berhasil disimpan.']); return response()->json(['message' => 'Subscription berhasil disimpan.']);
} }
public function destroy(Request $request): JsonResponse public function destroy(PushSubscriptionRequest $request): JsonResponse
{ {
$validated = $request->validate([ $validated = $request->validated();
'endpoint' => ['required', 'string'],
]);
PushSubscription::where('user_id', Auth::id()) PushSubscription::where('user_id', Auth::id())
->where('endpoint', $validated['endpoint']) ->where('endpoint', $validated['endpoint'])

View File

@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Admin\Manage;
use App\Enums\Permission;
use Illuminate\Foundation\Http\FormRequest;
class ApproveVerificationRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()?->can(Permission::OWNER_VERIFICATIONS_VERIFY->value) ?? false;
}
/**
* @return array<string, mixed>
*/
public function rules(): array
{
return [
'approval_note' => ['nullable', 'string', 'max:500'],
];
}
}

View File

@ -0,0 +1,24 @@
<?php
namespace App\Http\Requests\Admin\Manage;
use App\Enums\Permission;
use Illuminate\Foundation\Http\FormRequest;
class RejectVerificationRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()?->can(Permission::OWNER_VERIFICATIONS_REJECT->value) ?? false;
}
/**
* @return array<string, mixed>
*/
public function rules(): array
{
return [
'reason' => ['required', 'string', 'max:500'],
];
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class PushSubscriptionRequest extends FormRequest
{
public function authorize(): bool
{
return Auth::check();
}
/**
* @return array<string, mixed>
*/
public function rules(): array
{
if ($this->isMethod('DELETE')) {
return [
'endpoint' => ['required', 'string'],
];
}
return [
'endpoint' => ['required', 'string', 'url'],
'publicKey' => ['required', 'string'],
'authToken' => ['required', 'string'],
];
}
}