86 lines
2.9 KiB
PHP
86 lines
2.9 KiB
PHP
<?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']);
|
|
}
|
|
}
|
|
}
|