Initialer Laravel Commit für BetiX
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

This commit is contained in:
2026-04-04 18:01:50 +02:00
commit 0280278978
374 changed files with 65210 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Inertia\Inertia;
use App\Models\GameBet;
class WalletController extends Controller
{
/**
* Wallet overview page now fully local (no external API).
*/
public function index(Request $request)
{
$user = Auth::user();
abort_unless($user, 403);
// Synchronize balance if possible from external API during page load for better initial state
// (Optional, maybe already done in Proxy if user just came from a game)
// Frontend expects:
// - wallets: array of currency accounts (we return an empty list for now; extend later if needed)
// - btxBalance: main BTX balance as number/string
$wallets = [];
$btxBalance = (string) ($user->balance ?? '0');
return Inertia::render('Wallet', [
'wallets' => $wallets,
'btxBalance' => $btxBalance,
]);
}
/**
* GET /api/wallet/balance return current authenticated user balance
*/
public function balance(Request $request)
{
$user = Auth::user();
if (!$user) return response()->json(['error' => 'unauthorized'], 401);
return response()->json([
'balance' => (string) $user->balance,
'btx_balance' => (string) $user->balance,
// Add other currencies if user has multiple wallets
'wallets' => $user->wallets()->get()->map(fn($w) => [
'currency' => $w->currency,
'balance' => (string) $w->balance,
]),
]);
}
/**
* GET /wallet/bets fetch user's game bets
*/
public function bets(Request $request)
{
$user = Auth::user();
abort_unless($user, 403);
$query = GameBet::where('user_id', $user->id);
if ($request->filled('search')) {
$query->where('game_name', 'like', '%' . $request->input('search') . '%');
}
$sort = $request->input('sort', 'created_at');
$order = $request->input('order', 'desc');
if (in_array($sort, ['created_at', 'wager_amount', 'payout_amount', 'payout_multiplier', 'game_name'])) {
$query->orderBy($sort, $order === 'asc' ? 'asc' : 'desc');
}
$bets = $query->paginate(20)->through(function ($bet) {
return [
'id' => $bet->id,
'game_name' => $bet->game_name,
'wager_amount' => (string) $bet->wager_amount,
'payout_multiplier' => (string) $bet->payout_multiplier,
'payout_amount' => (string) $bet->payout_amount,
'currency' => $bet->currency,
'created_at' => $bet->created_at->toIso8601String(),
];
});
return response()->json($bets);
}
}