Files
Skunk-Lounge/app/Http/Controllers/Api/BetController.php

56 lines
1.6 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Helpers\SecurityHelper;
use App\Http\Controllers\Controller;
use App\Models\Game;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class BetController extends Controller
{
public function placeBet(Request $request)
{
$validated = $request->validate([
'game_id' => 'required|exists:games,id',
'amount' => 'required|numeric|min:0.01',
]);
DB::beginTransaction();
try {
$user = auth()->user();
if ($user->balance < $validated['amount']) {
abort(400, 'Insufficient balance');
}
$hash = SecurityHelper::generateBetHash($user->id, $validated['amount'], $validated['game_id']);
$game = Game::find($validated['game_id']);
$win = random_int(0, 100) < $game->win_probability;
$payout = $win ? $validated['amount'] * 2 : -$validated['amount'];
$user->balance += $payout;
$user->save();
Transaction::create([
'user_id' => $user->id,
'type' => $win ? 'win' : 'loss',
'amount' => abs($payout),
'description' => "Bet hash: $hash",
]);
DB::commit();
return response()->json([
'success' => true,
'win' => $win,
'balance' => $user->balance,
'hash' => $hash,
]);
} catch (\Exception $e) {
DB::rollback();
abort(500, $e->getMessage());
}
}
}