Analytics - v1.0.0-beta1

API Overview

This section provides detailed documentation of the ArtisanPack UI Analytics API, including models, services, data objects, events, and contracts.

Reference Guides

  • Models - Eloquent models for analytics data
  • Services - Service classes for analytics operations
  • Data Objects - Data Transfer Objects (DTOs)
  • Events - Laravel events dispatched by the package
  • Contracts - Interfaces for custom implementations

Quick Reference

Core Classes

Class Purpose
Analytics Main analytics manager
AnalyticsQuery Query builder for analytics data
TrackingService Handles tracking operations
SessionManager Session management
ConsentService GDPR consent handling

Models

Model Table Description
Site analytics_sites Multi-tenant sites
Visitor analytics_visitors Unique visitors
Session analytics_sessions Visit sessions
PageView analytics_page_views Page view records
Event analytics_events Custom events
Goal analytics_goals Conversion goals
Conversion analytics_conversions Goal conversions
Consent analytics_consents Consent records
Aggregate analytics_aggregates Aggregated data

Data Objects

Class Purpose
PageViewData Page view tracking data
EventData Event tracking data
SessionData Session information
VisitorData Visitor information
DateRange Date range for queries
DeviceInfo Device/browser information

Facades

use ArtisanPackUI\Analytics\Facades\Analytics;

// Track page view
Analytics::trackPageView($pageViewData);

// Track event
Analytics::trackEvent($eventData);

// Check if tracking is allowed
Analytics::canTrack();

// Get a specific provider
Analytics::provider('local');

Namespace Structure

ArtisanPackUI\Analytics\
├── Analytics                    # Main manager class
├── AnalyticsServiceProvider     # Service provider
├── Contracts\                   # Interfaces
│   ├── AnalyticsProviderInterface
│   ├── SiteResolverInterface
│   └── TenantResolverInterface
├── Data\                        # DTOs
│   ├── DateRange
│   ├── DeviceInfo
│   ├── EventData
│   ├── PageViewData
│   ├── SessionData
│   └── VisitorData
├── Events\                      # Laravel events
│   ├── PageViewRecorded
│   ├── EventTracked
│   └── ...
├── Facades\                     # Facades
│   └── Analytics
├── Http\
│   ├── Controllers\
│   ├── Livewire\               # Livewire components
│   └── Middleware\
├── Models\                      # Eloquent models
│   ├── Aggregate
│   ├── Consent
│   ├── Conversion
│   ├── Event
│   ├── Goal
│   ├── PageView
│   ├── Session
│   ├── Site
│   └── Visitor
├── Providers\                   # Analytics providers
│   ├── LocalProvider
│   ├── GoogleProvider
│   └── PlausibleProvider
├── Resolvers\                   # Site resolvers
│   ├── ApiKeyResolver
│   ├── DomainResolver
│   ├── HeaderResolver
│   └── SubdomainResolver
└── Services\                    # Service classes
    ├── AnalyticsQuery
    ├── ConsentService
    ├── SessionManager
    ├── TenantManager
    ├── TrackingService
    └── ...

Using the API

Direct Model Access

use ArtisanPackUI\Analytics\Models\PageView;
use ArtisanPackUI\Analytics\Models\Event;

// Query page views
$views = PageView::query()
    ->whereBetween('created_at', [$start, $end])
    ->forPath('/products')
    ->get();

// Query events
$events = Event::query()
    ->where('name', 'purchase')
    ->sum('value');

Using Services

use ArtisanPackUI\Analytics\Services\AnalyticsQuery;
use ArtisanPackUI\Analytics\Data\DateRange;

$query = app(AnalyticsQuery::class);
$range = DateRange::last30Days();

$stats = $query->getStats($range);
$topPages = $query->getTopPages($range, 10);

Using Helper Functions

// Tracking
trackPageView('/page', 'Title');
trackEvent('click', ['button' => 'submit']);

// Querying
$stats = analyticsStats(DateRange::last7Days());
$visitors = analyticsVisitors(DateRange::today());

Extending the Package

Custom Provider

use ArtisanPackUI\Analytics\Contracts\AnalyticsProviderInterface;

class CustomProvider implements AnalyticsProviderInterface
{
    public function trackPageView(PageViewData $data): void
    {
        // Custom implementation
    }

    public function trackEvent(EventData $data): void
    {
        // Custom implementation
    }
}

Custom Site Resolver

use ArtisanPackUI\Analytics\Contracts\SiteResolverInterface;
use ArtisanPackUI\Analytics\Models\Site;
use Illuminate\Http\Request;

class CustomResolver implements SiteResolverInterface
{
    public function resolve(Request $request): ?Site
    {
        // Custom resolution logic
    }

    public function getPriority(): int
    {
        return 50;
    }
}

Error Handling

The package throws specific exceptions:

use ArtisanPackUI\Analytics\Exceptions\AnalyticsException;
use ArtisanPackUI\Analytics\Exceptions\InvalidProviderException;
use ArtisanPackUI\Analytics\Exceptions\TrackingDisabledException;

try {
    trackEvent('test');
} catch (TrackingDisabledException $e) {
    // Tracking is disabled
} catch (AnalyticsException $e) {
    // General analytics error
}