From c739933668653a817f7adc6cf12ff592ef9daff5 Mon Sep 17 00:00:00 2001 From: Miguel N Date: Wed, 21 Jul 2021 19:33:52 +0100 Subject: [PATCH] Push suspension logic onto Service In preparation to the upcoming API, most logic is being moved to services. Models function as repositories. --- app/Http/Controllers/BanController.php | 41 +++++++++--------- app/Services/AccountSuspensionService.php | 53 +++++++++++++++++++++++ 2 files changed, 73 insertions(+), 21 deletions(-) create mode 100644 app/Services/AccountSuspensionService.php diff --git a/app/Http/Controllers/BanController.php b/app/Http/Controllers/BanController.php index 7865d5c..3818388 100755 --- a/app/Http/Controllers/BanController.php +++ b/app/Http/Controllers/BanController.php @@ -24,37 +24,34 @@ namespace App\Http\Controllers; use App\Ban; use App\Events\UserBannedEvent; use App\Http\Requests\BanUserRequest; +use App\Services\AccountSuspensionService; use App\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class BanController extends Controller { + + protected $suspensionService; + + public function __construct(AccountSuspensionService $suspensionService) + { + // Inject the service via DI + $this->suspensionService = $suspensionService; + } + public function insert(BanUserRequest $request, User $user) { $this->authorize('create', [Ban::class, $user]); - if (is_null($user->bans)) { - - $duration = $request->duration; - $reason = $request->reason; - $type = $request->suspensionType; // ON: Temporary | OFF: Permanent - - if ($type == "on") { - $expiryDate = now()->addDays($duration); - } - - $ban = Ban::create([ - 'userID' => $user->id, - 'reason' => $reason, - 'bannedUntil' => ($type == "on") ? $expiryDate->format('Y-m-d H:i:s') : null, - 'authorUserID' => Auth::user()->id, - 'isPermanent' => ($type == "off") ? true : false - ]); + if (!$this->suspensionService->isSuspended($user)) { + $this->suspensionService->suspend($request->reason, $request->duration, $user, $request->suspensionType); $request->session()->flash('success', __('Account suspended.')); + } else { + $request->session()->flash('error', __('Account already suspended!')); } @@ -65,11 +62,13 @@ class BanController extends Controller { $this->authorize('delete', $user->bans); - if (! is_null($user->bans)) { - $user->bans->delete(); - $request->session()->flash('success', __('User unsuspended successfully!')); + if ($this->suspensionService->isSuspended($user)) { + + $this->suspensionService->unsuspend($user); + $request->session()->flash('success', __('Account unsuspended successfully!')); + } else { - $request->session()->flash('error', __('This user isn\'t suspended!')); + $request->session()->flash('error', __('This account isn\'t suspended!')); } return redirect()->back(); diff --git a/app/Services/AccountSuspensionService.php b/app/Services/AccountSuspensionService.php new file mode 100644 index 0000000..54f1029 --- /dev/null +++ b/app/Services/AccountSuspensionService.php @@ -0,0 +1,53 @@ + $target->id + ]); + + if ($type == "on") { + $expiryDate = now()->addDays($duration); + } + + $ban = Ban::create([ + 'userID' => $target->id, + 'reason' => $reason, + 'bannedUntil' => ($type == "on") ? $expiryDate->format('Y-m-d H:i:s') : null, + 'authorUserID' => Auth::user()->id, + 'isPermanent' => ($type == "off") ? true : false + ]); + + return $ban; + } + + public function unsuspend(User $user): void { + $user->bans->delete(); + } + + public function isSuspended(User $user): bool { + return !is_null($user->bans); + } + + public function makePermanent(Ban $ban): void { + + $ban->bannedUntil = null; + $ban->isPermanent = true; + + $ban->save(); + + } + + +}