From 9bfa06b1cee8451bf13a2fa6fe1dffbf8e903a6c Mon Sep 17 00:00:00 2001 From: Tiago Ramos <2222055@my.ipleiria.pt> Date: Tue, 30 Dec 2025 19:01:02 +0000 Subject: [PATCH] Added endpoint to get authenticated user's transactions --- .../Http/Controllers/StatisticsController.php | 16 ++++++++++------ api/app/Http/Controllers/UserController.php | 5 +++++ api/routes/api.php | 1 + 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/api/app/Http/Controllers/StatisticsController.php b/api/app/Http/Controllers/StatisticsController.php index e8019f4..c43baad 100644 --- a/api/app/Http/Controllers/StatisticsController.php +++ b/api/app/Http/Controllers/StatisticsController.php @@ -81,12 +81,15 @@ class StatisticsController extends Controller $totalGames = Game::count(); $totalBlockedUsers = User::where('blocked', true)->count(); + // 2. Games Breakdown by Type $gamesByType = Game::select('type', DB::raw('count(*) as total')) ->groupBy('type') ->get(); + // 3. Games Per Month (CORRIGIDO PARA SQLITE) + // SQLite usa strftime('%Y-%m', coluna) em vez de DATE_FORMAT $gamesPerMonth = Game::select( - DB::raw('DATE_FORMAT(began_at, "%Y-%m") as month'), + DB::raw("strftime('%Y-%m', began_at) as month"), DB::raw('count(*) as total') ) ->whereNotNull('began_at') @@ -95,16 +98,17 @@ class StatisticsController extends Controller ->limit(12) ->get(); - - $totalCoinsPurchased = CoinTransaction::whereHas('type', function($q) { + // 4. Financial/Coin Stats + $totalCoinsPurchased = \App\Models\CoinTransaction::whereHas('type', function($q) { $q->where('name', 'Coin purchase'); }) ->sum('coins'); - $purchasesPerMonth = CoinTransaction::join('coin_transaction_types', 'coin_transactions.coin_transaction_type_id', '=', 'coin_transaction_types.id') + // Calculate Purchases Per Month (CORRIGIDO PARA SQLITE) + $purchasesPerMonth = \App\Models\CoinTransaction::join('coin_transaction_types', 'coin_transactions.coin_transaction_type_id', '=', 'coin_transaction_types.id') ->where('coin_transaction_types.name', 'Coin purchase') ->select( - DB::raw('DATE_FORMAT(coin_transactions.transaction_datetime, "%Y-%m") as month'), + DB::raw("strftime('%Y-%m', coin_transactions.transaction_datetime) as month"), DB::raw('SUM(coin_transactions.coins) as total_coins') ) ->groupBy('month') @@ -117,7 +121,7 @@ class StatisticsController extends Controller 'total_players' => $totalPlayers, 'total_games' => $totalGames, 'blocked_users' => $totalBlockedUsers, - 'total_coins_purchased' => (int) $totalCoinsPurchased, // Cast to int + 'total_coins_purchased' => (int) $totalCoinsPurchased, ], 'charts' => [ 'games_by_type' => $gamesByType, diff --git a/api/app/Http/Controllers/UserController.php b/api/app/Http/Controllers/UserController.php index 70911ee..01b511f 100644 --- a/api/app/Http/Controllers/UserController.php +++ b/api/app/Http/Controllers/UserController.php @@ -225,4 +225,9 @@ class UserController extends Controller return response()->json($transactions); } + + public function getMyTransactions(Request $request) + { + return $this->getTransactions($request, $request->user()); + } } diff --git a/api/routes/api.php b/api/routes/api.php index d15a631..87d8b69 100644 --- a/api/routes/api.php +++ b/api/routes/api.php @@ -30,6 +30,7 @@ Route::prefix('v1')->group(function () { 'updatePassword', ]); Route::post('/avatar', [ProfileController::class, 'uploadAvatar']); + Route::get('/transactions', [UserController::class, 'getMyTransactions']); }); // User Resources