Analytics - v1.2.1
API Resources
Since 1.1.0
Laravel API Resources that transform analytics data into consistent JSON structures. These resources are used by the InertiaDashboardController to serialize data as Inertia page props and can also be used in custom API endpoints.
Overview
All resources extend Illuminate\Http\Resources\Json\JsonResource and provide a standardized toArray() transformation with safe defaults (empty strings for text, 0 for integers, 0.0 for floats).
| Resource | Purpose |
|---|---|
StatsResource |
Overall analytics statistics |
PageViewTimeSeriesResource |
Time series chart data |
TopPageResource |
Most viewed pages |
TrafficSourceResource |
Traffic source breakdown |
BrowserBreakdownResource |
Browser usage breakdown |
CountryBreakdownResource |
Geographic breakdown |
DeviceBreakdownResource |
Device type breakdown |
EventBreakdownResource |
Custom event breakdown |
StatsResource
Transforms overall analytics statistics.
Output format:
{
"pageviews": 12500,
"visitors": 3200,
"sessions": 4100,
"bounce_rate": 45.2,
"avg_session_duration": 185,
"pages_per_session": 3.2,
"realtime_visitors": 42,
"comparison": null
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\StatsResource;
$stats = $analyticsQuery->getStats( $dateRange, true );
return new StatsResource( $stats );
PageViewTimeSeriesResource
Transforms time series data for chart visualization.
Output format:
{
"date": "2025-01-15",
"pageviews": 450,
"visitors": 120
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\PageViewTimeSeriesResource;
$chartData = $analyticsQuery->getPageViews( $dateRange, 'day' );
return PageViewTimeSeriesResource::collection( $chartData );
TopPageResource
Transforms top page data with view counts.
Output format:
{
"path": "/products",
"title": "Products",
"views": 1250,
"unique_views": 890
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\TopPageResource;
$topPages = $analyticsQuery->getTopPages( $dateRange, 10 );
return TopPageResource::collection( $topPages );
TrafficSourceResource
Transforms traffic source data with session and visitor counts.
Output format:
{
"source": "google",
"medium": "organic",
"sessions": 850,
"visitors": 620
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\TrafficSourceResource;
$sources = $analyticsQuery->getTrafficSources( $dateRange, 10 );
return TrafficSourceResource::collection( $sources );
BrowserBreakdownResource
Transforms browser usage breakdown data.
Output format:
{
"browser": "Chrome",
"version": "120",
"sessions": 2100,
"percentage": 51.2
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\BrowserBreakdownResource;
$browsers = $analyticsQuery->getBrowserBreakdown( $dateRange, 10 );
return BrowserBreakdownResource::collection( $browsers );
CountryBreakdownResource
Transforms geographic breakdown data.
Output format:
{
"country": "United States",
"country_code": "US",
"sessions": 1800,
"percentage": 43.9
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\CountryBreakdownResource;
$countries = $analyticsQuery->getCountryBreakdown( $dateRange, 10 );
return CountryBreakdownResource::collection( $countries );
DeviceBreakdownResource
Transforms device type breakdown data.
Output format:
{
"device_type": "desktop",
"sessions": 2500,
"percentage": 61.0
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\DeviceBreakdownResource;
$devices = $analyticsQuery->getDeviceBreakdown( $dateRange );
return DeviceBreakdownResource::collection( $devices );
EventBreakdownResource
Transforms custom event breakdown data.
Output format:
{
"name": "purchase",
"category": "ecommerce",
"count": 340,
"total_value": 28500.00,
"percentage": 12.5
}
Usage:
use ArtisanPackUI\Analytics\Http\Resources\EventBreakdownResource;
$events = $analyticsQuery->getEventBreakdown( $dateRange, 10 );
return EventBreakdownResource::collection( $events );
Using Resources in Custom Endpoints
You can use these resources in your own controllers to build custom analytics API endpoints:
use ArtisanPackUI\Analytics\Data\DateRange;
use ArtisanPackUI\Analytics\Http\Resources\StatsResource;
use ArtisanPackUI\Analytics\Http\Resources\TopPageResource;
use ArtisanPackUI\Analytics\Services\AnalyticsQuery;
class CustomAnalyticsController extends Controller
{
public function summary( AnalyticsQuery $query ): JsonResponse
{
$range = DateRange::last30Days();
return response()->json( [
'stats' => new StatsResource( $query->getStats( $range ) ),
'topPages' => TopPageResource::collection( $query->getTopPages( $range, 5 ) ),
] );
}
}