'boolean', 'settings' => 'array', ]; } protected static function booted(): void { static::creating(function (Website $website) { if (empty($website->tracking_id)) { $website->tracking_id = 'TA-' . strtoupper(Str::random(10)); } // Auto-generate slug from name if not provided if (empty($website->slug)) { $baseSlug = Str::slug($website->name); $slug = $baseSlug; $counter = 1; // Ensure slug uniqueness while (static::where('slug', $slug)->exists()) { $slug = $baseSlug . '-' . $counter; $counter++; } $website->slug = $slug; } }); } /** * Get the route key for the model. */ public function getRouteKeyName(): string { return 'slug'; } public function user(): BelongsTo { return $this->belongsTo(User::class); } public function visitors(): HasMany { return $this->hasMany(Visitor::class); } public function sessions(): HasMany { return $this->hasMany(AnalyticsSession::class); } public function pageViews(): HasMany { return $this->hasMany(PageView::class); } public function events(): HasMany { return $this->hasMany(Event::class); } public function goals(): HasMany { return $this->hasMany(Goal::class); } public function goalConversions(): HasMany { return $this->hasMany(GoalConversion::class); } public function funnels(): HasMany { return $this->hasMany(Funnel::class); } public function segments(): HasMany { return $this->hasMany(Segment::class); } public function dashboardWidgets(): HasMany { return $this->hasMany(DashboardWidget::class); } public function alerts(): HasMany { return $this->hasMany(Alert::class); } public function annotations(): HasMany { return $this->hasMany(Annotation::class); } public function dailyAggregates(): HasMany { return $this->hasMany(DailyAggregate::class); } public function pageDailyAggregates(): HasMany { return $this->hasMany(PageDailyAggregate::class); } public function getDataRetentionDaysAttribute(): int { return $this->settings['data_retention_days'] ?? 365; } public function embedSnippet(): string { $scriptUrl = route('tracking.script.alt', $this->tracking_id); return << HTML; } public function embedSnippetLegacy(): string { $scriptUrl = route('tracking.script', $this->tracking_id); return << HTML; } }