mirror of
				https://github.com/v2board/v2board.git
				synced 2025-11-04 19:31:45 +08:00 
			
		
		
		
	update: add v2 api
This commit is contained in:
		@@ -20,75 +20,6 @@ use Illuminate\Support\Facades\DB;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class StatController extends Controller
 | 
					class StatController extends Controller
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public function getStat(Request $request)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $params = $request->validate([
 | 
					 | 
				
			||||||
            'start_at' => '',
 | 
					 | 
				
			||||||
            'end_at' => ''
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (isset($params['start_at']) && isset($params['end_at'])) {
 | 
					 | 
				
			||||||
            $stats = Stat::where('record_at', '>=', $params['start_at'])
 | 
					 | 
				
			||||||
                ->where('record_at', '<', $params['end_at'])
 | 
					 | 
				
			||||||
                ->get()
 | 
					 | 
				
			||||||
                ->makeHidden(['record_at', 'created_at', 'updated_at', 'id', 'record_type'])
 | 
					 | 
				
			||||||
                ->toArray();
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            $statisticalService = new StatisticalService();
 | 
					 | 
				
			||||||
            return [
 | 
					 | 
				
			||||||
                'data' => $statisticalService->generateStatData()
 | 
					 | 
				
			||||||
            ];
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $stats = array_reduce($stats, function($carry, $item) {
 | 
					 | 
				
			||||||
            foreach($item as $key => $value) {
 | 
					 | 
				
			||||||
                if(isset($carry[$key]) && $carry[$key]) {
 | 
					 | 
				
			||||||
                    $carry[$key] += $value;
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    $carry[$key] = $value;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return $carry;
 | 
					 | 
				
			||||||
        }, []);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return [
 | 
					 | 
				
			||||||
            'data' => $stats
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function getStatRecord(Request $request)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $request->validate([
 | 
					 | 
				
			||||||
            'type' => 'required|in:paid_total,commission_total,register_count',
 | 
					 | 
				
			||||||
            'start_at' => '',
 | 
					 | 
				
			||||||
            'end_at' => ''
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $statisticalService = new StatisticalService();
 | 
					 | 
				
			||||||
        $statisticalService->setStartAt($request->input('start_at'));
 | 
					 | 
				
			||||||
        $statisticalService->setEndAt($request->input('end_at'));
 | 
					 | 
				
			||||||
        return [
 | 
					 | 
				
			||||||
            'data' => $statisticalService->getStatRecord($request->input('type'))
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function getRanking(Request $request)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $request->validate([
 | 
					 | 
				
			||||||
            'type' => 'required|in:server_traffic_rank,user_consumption_rank,invite_rank',
 | 
					 | 
				
			||||||
            'start_at' => '',
 | 
					 | 
				
			||||||
            'end_at' => '',
 | 
					 | 
				
			||||||
            'limit' => 'nullable|integer'
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $statisticalService = new StatisticalService();
 | 
					 | 
				
			||||||
        $statisticalService->setStartAt($request->input('start_at'));
 | 
					 | 
				
			||||||
        $statisticalService->setEndAt($request->input('end_at'));
 | 
					 | 
				
			||||||
        return [
 | 
					 | 
				
			||||||
            'data' => $statisticalService->getRanking($request->input('type'), $request->input('limit') ?? 20)
 | 
					 | 
				
			||||||
        ];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public function getOverride(Request $request)
 | 
					    public function getOverride(Request $request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return [
 | 
					        return [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										92
									
								
								app/Http/Controllers/V2/Admin/StatController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								app/Http/Controllers/V2/Admin/StatController.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Http\Controllers\V2\Admin;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Http\Controllers\Controller;
 | 
				
			||||||
 | 
					use App\Models\CommissionLog;
 | 
				
			||||||
 | 
					use App\Models\Order;
 | 
				
			||||||
 | 
					use App\Models\ServerShadowsocks;
 | 
				
			||||||
 | 
					use App\Models\ServerTrojan;
 | 
				
			||||||
 | 
					use App\Models\ServerVmess;
 | 
				
			||||||
 | 
					use App\Models\Stat;
 | 
				
			||||||
 | 
					use App\Models\StatServer;
 | 
				
			||||||
 | 
					use App\Models\StatUser;
 | 
				
			||||||
 | 
					use App\Models\Ticket;
 | 
				
			||||||
 | 
					use App\Models\User;
 | 
				
			||||||
 | 
					use App\Services\StatisticalService;
 | 
				
			||||||
 | 
					use Illuminate\Http\Request;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Cache;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\DB;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class StatController extends Controller
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function override(Request $request)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $params = $request->validate([
 | 
				
			||||||
 | 
					            'start_at' => '',
 | 
				
			||||||
 | 
					            'end_at' => ''
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (isset($params['start_at']) && isset($params['end_at'])) {
 | 
				
			||||||
 | 
					            $stats = Stat::where('record_at', '>=', $params['start_at'])
 | 
				
			||||||
 | 
					                ->where('record_at', '<', $params['end_at'])
 | 
				
			||||||
 | 
					                ->get()
 | 
				
			||||||
 | 
					                ->makeHidden(['record_at', 'created_at', 'updated_at', 'id', 'record_type'])
 | 
				
			||||||
 | 
					                ->toArray();
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            $statisticalService = new StatisticalService();
 | 
				
			||||||
 | 
					            return [
 | 
				
			||||||
 | 
					                'data' => $statisticalService->generateStatData()
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $stats = array_reduce($stats, function($carry, $item) {
 | 
				
			||||||
 | 
					            foreach($item as $key => $value) {
 | 
				
			||||||
 | 
					                if(isset($carry[$key]) && $carry[$key]) {
 | 
				
			||||||
 | 
					                    $carry[$key] += $value;
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    $carry[$key] = $value;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return $carry;
 | 
				
			||||||
 | 
					        }, []);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return [
 | 
				
			||||||
 | 
					            'data' => $stats
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function record(Request $request)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $request->validate([
 | 
				
			||||||
 | 
					            'type' => 'required|in:paid_total,commission_total,register_count',
 | 
				
			||||||
 | 
					            'start_at' => '',
 | 
				
			||||||
 | 
					            'end_at' => ''
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $statisticalService = new StatisticalService();
 | 
				
			||||||
 | 
					        $statisticalService->setStartAt($request->input('start_at'));
 | 
				
			||||||
 | 
					        $statisticalService->setEndAt($request->input('end_at'));
 | 
				
			||||||
 | 
					        return [
 | 
				
			||||||
 | 
					            'data' => $statisticalService->getStatRecord($request->input('type'))
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function ranking(Request $request)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $request->validate([
 | 
				
			||||||
 | 
					            'type' => 'required|in:server_traffic_rank,user_consumption_rank,invite_rank',
 | 
				
			||||||
 | 
					            'start_at' => '',
 | 
				
			||||||
 | 
					            'end_at' => '',
 | 
				
			||||||
 | 
					            'limit' => 'nullable|integer'
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $statisticalService = new StatisticalService();
 | 
				
			||||||
 | 
					        $statisticalService->setStartAt($request->input('start_at'));
 | 
				
			||||||
 | 
					        $statisticalService->setEndAt($request->input('end_at'));
 | 
				
			||||||
 | 
					        return [
 | 
				
			||||||
 | 
					            'data' => $statisticalService->getRanking($request->input('type'), $request->input('limit') ?? 20)
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								app/Http/Routes/V2/AdminRoute.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								app/Http/Routes/V2/AdminRoute.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					namespace App\Http\Routes\V2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Illuminate\Contracts\Routing\Registrar;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AdminRoute
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function map(Registrar $router)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $router->group([
 | 
				
			||||||
 | 
					            'prefix' => config('v2board.secure_path', config('v2board.frontend_admin_path', hash('crc32b', config('app.key')))),
 | 
				
			||||||
 | 
					            'middleware' => ['admin', 'log'],
 | 
				
			||||||
 | 
					        ], function ($router) {
 | 
				
			||||||
 | 
					            // Stat
 | 
				
			||||||
 | 
					            $router->get ('/stat/override', 'V2\\Admin\\StatController@override');
 | 
				
			||||||
 | 
					            $router->get ('/stat/record', 'V2\\Admin\\StatController@record');
 | 
				
			||||||
 | 
					            $router->get ('/stat/ranking', 'V2\\Admin\\StatController@ranking');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -76,5 +76,16 @@ class RouteServiceProvider extends ServiceProvider
 | 
				
			|||||||
                $this->app->make('App\\Http\\Routes\\V1\\' . basename($file, '.php'))->map($router);
 | 
					                $this->app->make('App\\Http\\Routes\\V1\\' . basename($file, '.php'))->map($router);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Route::group([
 | 
				
			||||||
 | 
					            'prefix' => '/api/v2',
 | 
				
			||||||
 | 
					            'middleware' => 'api',
 | 
				
			||||||
 | 
					            'namespace' => $this->namespace
 | 
				
			||||||
 | 
					        ], function ($router) {
 | 
				
			||||||
 | 
					            foreach (glob(app_path('Http//Routes//V2') . '/*.php') as $file) {
 | 
				
			||||||
 | 
					                $this->app->make('App\\Http\\Routes\\V2\\' . basename($file, '.php'))->map($router);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user