diff --git a/app/Http/Controllers/V1/User/StatController.php b/app/Http/Controllers/V1/User/StatController.php index 11bb9c0..1103bfb 100644 --- a/app/Http/Controllers/V1/User/StatController.php +++ b/app/Http/Controllers/V1/User/StatController.php @@ -14,13 +14,24 @@ class StatController extends Controller public function getTrafficLog(Request $request) { $startDate = now()->startOfMonth()->timestamp; + + // Aggregate per-node data into per-day entries for backward compatibility $records = StatUser::query() + ->select([ + 'user_id', + 'server_rate', + 'record_at', + 'record_type', + DB::raw('SUM(u) as u'), + DB::raw('SUM(d) as d'), + ]) ->where('user_id', $request->user()->id) ->where('record_at', '>=', $startDate) + ->groupBy(['user_id', 'server_rate', 'record_at', 'record_type']) ->orderBy('record_at', 'DESC') ->get(); - $data = TrafficLogResource::collection(collect($records)); + $data = TrafficLogResource::collection($records); return $this->success($data); } } diff --git a/app/Http/Controllers/V2/Admin/StatController.php b/app/Http/Controllers/V2/Admin/StatController.php index e7d615c..f6d6d0a 100644 --- a/app/Http/Controllers/V2/Admin/StatController.php +++ b/app/Http/Controllers/V2/Admin/StatController.php @@ -13,6 +13,7 @@ use App\Models\Ticket; use App\Models\User; use App\Services\StatisticalService; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class StatController extends Controller { @@ -234,14 +235,31 @@ class StatController extends Controller ]); $pageSize = $request->input('pageSize', 10); - $records = StatUser::orderBy('record_at', 'DESC') + $page = $request->input('page', 1); + + // Aggregate per-node data into per-day entries for backward compatibility + $query = StatUser::query() + ->select([ + 'user_id', + 'server_rate', + 'record_at', + 'record_type', + DB::raw('SUM(u) as u'), + DB::raw('SUM(d) as d'), + DB::raw('MAX(created_at) as created_at'), + DB::raw('MAX(updated_at) as updated_at'), + ]) ->where('user_id', $request->input('user_id')) - ->paginate($pageSize); + ->groupBy(['user_id', 'server_rate', 'record_at', 'record_type']) + ->orderBy('record_at', 'DESC'); + + // Manual pagination for grouped query + $total = (clone $query)->get()->count(); + $data = $query->skip(($page - 1) * $pageSize)->take($pageSize)->get(); - $data = $records->items(); return [ 'data' => $data, - 'total' => $records->total(), + 'total' => $total, ]; }