Files
Dolo 018c7662a3
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
Neuaufbau des Repositories
2026-04-13 13:18:15 +02:00

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,
]
]);
}
}