'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)); } }); } 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', $this->tracking_id); return << HTML; } }