refactor: encapsulate password update and push subscription logic within dedicated services

This commit is contained in:
Yoga Pangestu 2026-06-22 12:08:20 +07:00
parent 60142c5aa8
commit 5119dd7208
4 changed files with 68 additions and 22 deletions

View File

@ -5,8 +5,8 @@
use App\Http\Controllers\Concerns\FlashesEntityMessage;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Account\UpdatePasswordRequest;
use App\Services\Account\ProfileService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Hash;
use Inertia\Inertia;
use Inertia\Response;
@ -14,6 +14,10 @@ class PasswordController extends Controller
{
use FlashesEntityMessage;
public function __construct(
private readonly ProfileService $profileService,
) {}
public function edit(): Response
{
return Inertia::render('admin/account/Password');
@ -21,9 +25,10 @@ public function edit(): Response
public function update(UpdatePasswordRequest $request): RedirectResponse
{
$user = $request->user();
$user->password = Hash::make($request->validated('password'));
$user->save();
$this->profileService->updatePassword(
$request->user(),
$request->validated('password'),
);
$this->flashUpdated('Kata sandi');

View File

@ -3,25 +3,20 @@
namespace App\Http\Controllers;
use App\Http\Requests\PushSubscriptionRequest;
use App\Models\PushSubscription;
use App\Services\System\PushSubscriptionService;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;
class PushSubscriptionController extends Controller
{
public function __construct(
private readonly PushSubscriptionService $pushSubscriptionService,
) {}
public function store(PushSubscriptionRequest $request): JsonResponse
{
$validated = $request->validated();
PushSubscription::updateOrCreate(
[
'user_id' => Auth::id(),
'endpoint' => $validated['endpoint'],
],
[
'public_key' => $validated['publicKey'],
'auth_token' => $validated['authToken'],
]
$this->pushSubscriptionService->updateOrCreateSubscription(
$request->validated(),
$request->user()->id,
);
return response()->json(['message' => 'Subscription berhasil disimpan.']);
@ -29,11 +24,10 @@ public function store(PushSubscriptionRequest $request): JsonResponse
public function destroy(PushSubscriptionRequest $request): JsonResponse
{
$validated = $request->validated();
PushSubscription::where('user_id', Auth::id())
->where('endpoint', $validated['endpoint'])
->delete();
$this->pushSubscriptionService->deleteSubscription(
$request->validated('endpoint'),
$request->user()->id,
);
return response()->json(['message' => 'Subscription berhasil dihapus.']);
}

View File

@ -4,6 +4,7 @@
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class ProfileService
{
@ -29,4 +30,13 @@ public function update(array $validated, User $user): void
);
});
}
/**
* Update user password.
*/
public function updatePassword(User $user, string $password): void
{
$user->password = Hash::make($password);
$user->save();
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Services\System;
use App\Models\PushSubscription;
class PushSubscriptionService
{
/**
* Store or update a push subscription.
*
* @param array<string, mixed> $validated
*/
public function updateOrCreateSubscription(array $validated, int $userId): void
{
PushSubscription::updateOrCreate(
[
'user_id' => $userId,
'endpoint' => $validated['endpoint'],
],
[
'public_key' => $validated['publicKey'],
'auth_token' => $validated['authToken'],
]
);
}
/**
* Delete a push subscription.
*/
public function deleteSubscription(string $endpoint, int $userId): void
{
PushSubscription::where('user_id', $userId)
->where('endpoint', $endpoint)
->delete();
}
}