This commit is contained in:
Tomáš Dvořák
2025-10-16 13:32:05 +02:00
commit 12cba639b9
663 changed files with 168914 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
package models
import (
"encoding/json"
)
// VisitorEvent stores client-side analytics events
// TableName: visitor_events
// Common events: "page_view", "click", "interaction"
// Fields kept generic to avoid rigid schema changes
// Metadata stores arbitrary event payload (e.g., element details)
type VisitorEvent struct {
BaseModel
EventType string `gorm:"index;size:50" json:"event_type"`
Page string `gorm:"index;size:512" json:"page"` // Short page path
PagePath string `gorm:"index;size:512" json:"page_path"` // Full page path (alias for Page)
PageName string `gorm:"size:512" json:"page_name"` // Human-readable page name
Element string `gorm:"size:256" json:"element"` // Element identifier (for clicks/interactions)
Referrer string `gorm:"size:512" json:"referrer"`
UserAgent string `gorm:"size:512" json:"user_agent"`
IPAddress string `gorm:"size:64" json:"ip_address"`
SessionID string `gorm:"size:128;index" json:"session_id"`
UserID *uint `gorm:"index" json:"user_id,omitempty"`
Data json.RawMessage `gorm:"type:jsonb" json:"data"` // Generic event data
Metadata json.RawMessage `gorm:"type:jsonb" json:"metadata"` // Legacy metadata field
}
func (VisitorEvent) TableName() string { return "visitor_events" }