-
-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy pathStatsController.php
More file actions
51 lines (42 loc) · 1.64 KB
/
StatsController.php
File metadata and controls
51 lines (42 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
namespace App\Web\Analytics;
use App\Web\Analytics\PackageDownloadsPerDay\PackageDownloadsPerDay;
use App\Web\Analytics\VisitsPerDay\VisitsPerDay;
use Tempest\Clock\Clock;
use Tempest\DateTime\Duration;
use Tempest\Router\Get;
use Tempest\View\View;
use function Tempest\Database\query;
use function Tempest\Support\arr;
use function Tempest\view;
final readonly class StatsController
{
#[Get('/stats')]
public function __invoke(): View
{
$limit = 30;
$visitsPerDay = arr(
query(VisitsPerDay::class)->select()->orderBy('date DESC')->limit($limit)->all(),
)->reverse();
$packageDownloadsPerDay = arr(
query(PackageDownloadsPerDay::class)
->select()
->whereField('package', 'framework')
->orderBy('date DESC')
->limit($limit)
->all(),
)->reverse();
return view(
__DIR__ . '/stats.view.php',
visitsPerDay: new Chart(
labels: $visitsPerDay->map(fn (VisitsPerDay $item) => $item->date->format('Y-m-d')),
values: $visitsPerDay->map(fn (VisitsPerDay $item) => $item->count),
),
packageDownloadsPerDay: new Chart(
labels: $packageDownloadsPerDay->map(fn (PackageDownloadsPerDay $item) => $item->date->format('Y-m-d')),
values: $packageDownloadsPerDay->map(fn (PackageDownloadsPerDay $item) => $item->total),
min: $packageDownloadsPerDay->sortByCallback(fn (PackageDownloadsPerDay $a, PackageDownloadsPerDay $_b) => $a->total)->first()->total,
),
);
}
}