Initialer Laravel Commit für BetiX
This commit is contained in:
85
app/Http/Controllers/VipController.php
Normal file
85
app/Http/Controllers/VipController.php
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Concerns\ProxiesBackend;
|
||||
use App\Services\BackendHttpClient;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Inertia;
|
||||
|
||||
class VipController extends Controller
|
||||
{
|
||||
use ProxiesBackend;
|
||||
|
||||
public function __construct(private readonly BackendHttpClient $client)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* VIP Levels page → proxy to external API.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$user = $request->user();
|
||||
$defaultProps = [
|
||||
'claimedLevels' => [],
|
||||
'cashRewards' => [],
|
||||
'userStats' => $user ? [
|
||||
'vip_level' => $user->vip_level ?? 0,
|
||||
'vip_points' => $user->stats?->vip_points ?? 0,
|
||||
] : null,
|
||||
'userVipLevel' => $user?->vip_level ?? 0,
|
||||
];
|
||||
|
||||
try {
|
||||
$res = $this->client->get($request, '/vip-levels', [], retry: true);
|
||||
if ($res->successful()) {
|
||||
$j = $res->json() ?: [];
|
||||
return Inertia::render('VipLevels', [
|
||||
'claimedLevels' => $j['claimedLevels'] ?? $j['claimed_levels'] ?? [],
|
||||
'cashRewards' => $j['cashRewards'] ?? $j['rewards'] ?? [],
|
||||
'userStats' => $j['userStats'] ?? $j['stats'] ?? $defaultProps['userStats'],
|
||||
'userVipLevel' => $j['userVipLevel'] ?? $j['vip_level'] ?? $defaultProps['userVipLevel'],
|
||||
]);
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// Fall through to local fallback
|
||||
}
|
||||
|
||||
// Render page with local data when external API is unavailable
|
||||
return Inertia::render('VipLevels', $defaultProps);
|
||||
}
|
||||
|
||||
/**
|
||||
* Claim VIP reward → proxy to external API.
|
||||
*/
|
||||
public function claim(Request $request)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'level' => 'required|integer|min:1|max:100',
|
||||
]);
|
||||
try {
|
||||
$res = $this->client->post($request, '/vip-levels/claim', [
|
||||
'level' => (int) $data['level'],
|
||||
]);
|
||||
if ($res->successful()) {
|
||||
$body = $res->json() ?: [];
|
||||
// Backward compat: ensure a success message
|
||||
if (!isset($body['message'])) {
|
||||
$body['message'] = 'Reward claimed successfully!';
|
||||
}
|
||||
return back()->with('success', $body['message']);
|
||||
}
|
||||
if ($res->clientError()) {
|
||||
$msg = data_get($res->json(), 'message', 'Invalid request');
|
||||
return back()->withErrors(['message' => $msg]);
|
||||
}
|
||||
if ($res->serverError()) {
|
||||
return back()->withErrors(['message' => 'Service temporarily unavailable']);
|
||||
}
|
||||
return back()->withErrors(['message' => 'API server not reachable']);
|
||||
} catch (\Throwable $e) {
|
||||
return back()->withErrors(['message' => 'API server not reachable']);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user