matches and transactions history fully operational
This commit is contained in:
@@ -183,16 +183,65 @@ class UserController extends Controller
|
||||
{
|
||||
$this->authorize('view', $user);
|
||||
|
||||
$matches = Game::query()
|
||||
->where(function ($q) use ($user) {
|
||||
$q->where('player1_user_id', $user->id)->orWhere(
|
||||
'player2_user_id',
|
||||
$user->id,
|
||||
);
|
||||
})
|
||||
->with(['winner', 'player1', 'player2'])
|
||||
->orderBy('began_at', 'desc')
|
||||
->paginate(10);
|
||||
$outcomeSql = "CASE
|
||||
WHEN is_draw = 1 THEN 'DRAW'
|
||||
WHEN winner_user_id = {$user->id} THEN 'WIN'
|
||||
ELSE 'LOSS'
|
||||
END";
|
||||
|
||||
$query = Game::query()
|
||||
->select('*')
|
||||
->selectRaw("($outcomeSql) as outcome_text")
|
||||
->where(function ($q) use ($user) {
|
||||
$q->where('player1_user_id', $user->id)
|
||||
->orWhere('player2_user_id', $user->id);
|
||||
})
|
||||
->with(['winner', 'player1', 'player2']);
|
||||
|
||||
if ($request->has('type')) {
|
||||
$query->where('type', $request->type);
|
||||
}
|
||||
|
||||
if ($request->has('status')) {
|
||||
$query->where('status', $request->status);
|
||||
}
|
||||
|
||||
if ($request->filled('outcome')) {
|
||||
switch ($request->outcome) {
|
||||
case 'win':
|
||||
$query->where('winner_user_id', $user->id)
|
||||
->where('is_draw', 0);
|
||||
break;
|
||||
case 'loss':
|
||||
case 'forfeit': // Forfeit treated as loss for now
|
||||
$query->where('loser_user_id', $user->id)
|
||||
->where('is_draw', 0);
|
||||
break;
|
||||
case 'draw':
|
||||
$query->where('is_draw', 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->has('date_from')) {
|
||||
$query->whereDate('began_at', '>=', $request->date_from);
|
||||
}
|
||||
|
||||
if ($request->has('date_to')) {
|
||||
$query->whereDate('ended_at', '<=', $request->date_to);
|
||||
}
|
||||
|
||||
$order = $request->get('sort_by', 'began_at');
|
||||
$direction = $request->get('sort_direction', 'desc');
|
||||
|
||||
if ($order === 'outcome') {
|
||||
$query->orderBy('outcome_text', $direction);
|
||||
} else {
|
||||
$query->orderBy($order, $direction);
|
||||
}
|
||||
|
||||
$matches = $query->orderBy($order, $direction)
|
||||
->paginate(10);
|
||||
|
||||
return response()->json($matches);
|
||||
}
|
||||
@@ -230,7 +279,7 @@ class UserController extends Controller
|
||||
|
||||
if ($request->has('type')) {
|
||||
$query->whereHas('type', function ($q) use ($request) {
|
||||
$q->where('name', $request->type);
|
||||
$q->where('type', $request->type);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user