54 lines
1.6 KiB
PHP
54 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Bonus;
|
|
use App\Models\BonusStat;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class DashboardController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$bonusesCount = Bonus::count();
|
|
$totalViews = BonusStat::where('type', 'view')->count();
|
|
$totalClicks = BonusStat::where('type', 'click')->count();
|
|
|
|
// Stats per bonus
|
|
$bonusStats = Bonus::select('id', 'name')
|
|
->withCount([
|
|
'stats as views_count' => function ($query) {
|
|
$query->where('type', 'view');
|
|
},
|
|
'stats as clicks_count' => function ($query) {
|
|
$query->where('type', 'click');
|
|
}
|
|
])
|
|
->orderBy('clicks_count', 'desc')
|
|
->get();
|
|
|
|
// Last 7 days activity
|
|
$dailyActivity = BonusStat::select(
|
|
DB::raw('DATE(created_at) as date'),
|
|
DB::raw('SUM(CASE WHEN type = "view" THEN 1 ELSE 0 END) as views'),
|
|
DB::raw('SUM(CASE WHEN type = "click" THEN 1 ELSE 0 END) as clicks')
|
|
)
|
|
->where('created_at', '>=', now()->subDays(7))
|
|
->groupBy('date')
|
|
->orderBy('date')
|
|
->get();
|
|
|
|
return Inertia::render('Dashboard', [
|
|
'stats' => [
|
|
'bonusesCount' => $bonusesCount,
|
|
'totalViews' => $totalViews,
|
|
'totalClicks' => $totalClicks,
|
|
'bonusStats' => $bonusStats,
|
|
'dailyActivity' => $dailyActivity,
|
|
]
|
|
]);
|
|
}
|
|
}
|