Files
BetiX/app/Http/Controllers/VipController.php
Dolo 0280278978
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
Initialer Laravel Commit für BetiX
2026-04-04 18:01:50 +02:00

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']);
}
}
}