deductBalance($currentUser, $package); $this->deliverCurrencies($user, $package); $this->deliverRank($user, $package); $this->deliverBadges($user, $package); $this->deliverFurniture($currentUser, $package); return $this->buildSuccessMessage($currentUser, $user, $package); } private function deductBalance(User $user, WebsiteShopArticle $package): void { $user->decrement('website_balance', $package->price()); } private function deliverCurrencies(User $user, WebsiteShopArticle $package): void { $this->sendCurrency->execute($user, 'credits', $package->credits); $this->sendCurrency->execute($user, 'duckets', $package->duckets); $this->sendCurrency->execute($user, 'diamonds', $package->diamonds); } private function deliverRank(User $user, WebsiteShopArticle $package): void { if (! $package->give_rank) { return; } if ($this->rconService->isConnected) { $this->rconService->setRank($user, $package->give_rank); $this->rconService->disconnectUser($user); } else { $user->forceFill(['rank' => $package->give_rank])->save(); } } private function deliverBadges(User $user, WebsiteShopArticle $package): void { if (! $package->badges) { return; } $badgeList = explode(';', $package->badges); $ownedBadges = $user->badges()->pluck('badge_code')->toArray(); foreach ($badgeList as $badge) { if (in_array($badge, $ownedBadges)) { continue; } if ($this->rconService->isConnected) { $this->rconService->giveBadge($user, $badge); } else { $user->badges()->updateOrCreate([ 'user_id' => $user->id, 'badge_code' => $badge, ]); } } } private function deliverFurniture(User $currentUser, WebsiteShopArticle $package): void { if (! $package->furniture) { return; } $sendFurniture = app(SendFurniture::class); $sendFurniture->execute($currentUser, json_decode($package->furniture, true)); } private function buildSuccessMessage(User $currentUser, User $recipient, WebsiteShopArticle $package): string { $message = __('You have successfully purchased the package :name', ['name' => $package->name]); if ($recipient->username !== $currentUser->username) { $message = __('You have successfully purchased the package :name for :username', [ 'name' => $package->name, 'username' => $recipient->username, ]); } return $message; } }