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\Controller;
use App\Http\Requests\Admin\Manage\ApproveVerificationRequest;
use App\Http\Requests\Admin\Manage\RejectVerificationRequest;
use App\Models\Cutting;
use App\Services\Manage\StockService;
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(
$cutting,
$request->user(),
$request->input('approval_note'),
$request->validated('approval_note'),
);
$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');
}
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(
$cutting,
$request->user(),
$request->input('reason'),
$request->validated('reason'),
);
$this->flashSuccess('Verifikasi berhasil ditolak.');

View File

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