Files

52 lines
1.6 KiB
PHP
Raw Permalink Normal View History

2026-03-18 12:18:07 +02:00
<?php
namespace App\Http\Controllers;
2026-03-18 13:32:36 +02:00
use App\Http\Controllers\Concerns\ParsesDateRange;
2026-03-18 12:18:07 +02:00
use App\Models\Website;
use App\Services\AnalyticsQueryService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\View\View;
class DashboardController extends Controller
{
2026-03-18 13:32:36 +02:00
use ParsesDateRange;
2026-03-18 12:18:07 +02:00
public function show(Request $request, Website $website): View
{
$this->authorize('view', $website);
[$from, $to] = $this->parseDateRange($request);
2026-03-19 18:42:19 +02:00
[$prevFrom, $prevTo] = $this->previousPeriod($from, $to);
2026-03-18 12:18:07 +02:00
$service = AnalyticsQueryService::for($website, $from, $to);
2026-03-19 18:42:19 +02:00
$prevService = AnalyticsQueryService::for($website, $prevFrom, $prevTo);
2026-03-18 12:18:07 +02:00
$metrics = $service->summary();
2026-03-19 18:42:19 +02:00
$prevMetrics = $prevService->summary();
2026-03-18 12:18:07 +02:00
$chartData = $service->visitorsOverTime();
$activeVisitors = AnalyticsQueryService::activeVisitors($website);
2026-03-18 16:59:39 +02:00
$goalConversions = $service->conversionsReport();
$goalChartData = $service->goalCompletionsOverTime();
2026-03-18 12:18:07 +02:00
2026-03-19 18:42:19 +02:00
$topPages = $service->topPages(5);
$topSources = $service->trafficSources(5);
2026-03-18 12:18:07 +02:00
return view('dashboard.show', compact(
2026-03-19 18:42:19 +02:00
'website', 'metrics', 'prevMetrics', 'chartData', 'activeVisitors',
2026-03-18 16:59:39 +02:00
'goalConversions', 'goalChartData', 'from', 'to',
2026-03-19 18:42:19 +02:00
'topPages', 'topSources',
2026-03-18 12:18:07 +02:00
));
}
public function realtime(Website $website): JsonResponse
{
$this->authorize('view', $website);
return response()->json([
'active' => AnalyticsQueryService::activeVisitors($website),
]);
}
}