package models import ( "time" ) // AuditLog represents an audit trail entry type AuditLog struct { ID uint `gorm:"primarykey" json:"id"` UserID *uint `json:"user_id"` User *User `gorm:"foreignKey:UserID" json:"user,omitempty"` Action string `gorm:"type:varchar(100);not null" json:"action"` // CREATE, UPDATE, DELETE, LOGIN, etc. EntityType string `gorm:"type:varchar(100)" json:"entity_type"` // Article, User, Settings, etc. EntityID *uint `json:"entity_id"` Description string `gorm:"type:text" json:"description"` IPAddress string `gorm:"type:varchar(45)" json:"ip_address"` UserAgent string `gorm:"type:text" json:"user_agent"` Changes string `gorm:"type:json" json:"changes,omitempty"` // JSON string of before/after values Metadata string `gorm:"type:json" json:"metadata,omitempty"` // Additional context as JSON CreatedAt time.Time `json:"created_at"` } // TableName overrides the default table name func (AuditLog) TableName() string { return "audit_logs" }