package model import ( "time" "gorm.io/datatypes" ) // AuditEvent 是不可变内部业务审计事件。 type AuditEvent struct { ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"` EventID string `gorm:"column:event_id;type:varchar(64);not null;uniqueIndex" json:"event_id"` OccurredAt time.Time `gorm:"column:occurred_at;type:timestamptz;not null" json:"occurred_at"` Category string `gorm:"column:category;type:varchar(64);not null" json:"category"` ActionCode string `gorm:"column:action_code;type:varchar(100);not null" json:"action_code"` ActionName string `gorm:"column:action_name;type:varchar(200);not null" json:"action_name"` Summary string `gorm:"column:summary;type:varchar(500);not null" json:"summary"` ActorKind string `gorm:"column:actor_kind;type:varchar(32);not null" json:"actor_kind"` ActorID string `gorm:"column:actor_id;type:varchar(128);not null" json:"actor_id"` ActorName string `gorm:"column:actor_name;type:varchar(200);not null" json:"actor_name"` ActorShopID *uint `gorm:"column:actor_shop_id" json:"actor_shop_id,omitempty"` ActorShopName string `gorm:"column:actor_shop_name;type:varchar(200);not null;default:''" json:"actor_shop_name,omitempty"` ActorEnterpriseID *uint `gorm:"column:actor_enterprise_id" json:"actor_enterprise_id,omitempty"` ActorEnterpriseName string `gorm:"column:actor_enterprise_name;type:varchar(200);not null;default:''" json:"actor_enterprise_name,omitempty"` Source string `gorm:"column:source;type:varchar(32);not null" json:"source"` RequestPath string `gorm:"column:request_path;type:varchar(300);not null;default:''" json:"request_path,omitempty"` RequestMethod string `gorm:"column:request_method;type:varchar(16);not null;default:''" json:"request_method,omitempty"` IPAddress string `gorm:"column:ip_address;type:varchar(64);not null;default:''" json:"ip_address,omitempty"` UserAgent string `gorm:"column:user_agent;type:varchar(500);not null;default:''" json:"user_agent,omitempty"` ScopeType string `gorm:"column:scope_type;type:varchar(32);not null" json:"scope_type"` ScopeID string `gorm:"column:scope_id;type:varchar(128);not null;default:''" json:"scope_id,omitempty"` ScopeName string `gorm:"column:scope_name;type:varchar(200);not null;default:''" json:"scope_name,omitempty"` Result string `gorm:"column:result;type:varchar(16);not null" json:"result"` RiskLevel string `gorm:"column:risk_level;type:varchar(16);not null" json:"risk_level"` ErrorCode string `gorm:"column:error_code;type:varchar(100);not null;default:''" json:"error_code,omitempty"` ErrorSummary string `gorm:"column:error_summary;type:varchar(500);not null;default:''" json:"error_summary,omitempty"` RequestID string `gorm:"column:request_id;type:varchar(100);not null;default:''" json:"request_id,omitempty"` CorrelationID string `gorm:"column:correlation_id;type:varchar(100);not null;default:''" json:"correlation_id,omitempty"` ParentEventID string `gorm:"column:parent_event_id;type:varchar(64);not null;default:''" json:"parent_event_id,omitempty"` BatchTotal int `gorm:"column:batch_total;not null;default:0" json:"batch_total"` SuccessCount int `gorm:"column:success_count;not null;default:0" json:"success_count"` FailCount int `gorm:"column:fail_count;not null;default:0" json:"fail_count"` Metadata datatypes.JSON `gorm:"column:metadata;type:jsonb;not null;default:'{}'" json:"metadata"` ContentHash string `gorm:"column:content_hash;type:varchar(64);not null" json:"content_hash"` CreatedAt time.Time `gorm:"column:created_at;type:timestamptz;not null;autoCreateTime" json:"created_at"` } // TableName 返回统一审计事件表名。 func (AuditEvent) TableName() string { return "tb_audit_event" } // AuditEventResource 是审计事件发生时的独立资源快照。 type AuditEventResource struct { ID uint `gorm:"column:id;primaryKey;autoIncrement" json:"id"` AuditEventID uint `gorm:"column:audit_event_id;not null" json:"audit_event_id"` ResourceType string `gorm:"column:resource_type;type:varchar(64);not null" json:"resource_type"` ResourceID *string `gorm:"column:resource_id;type:varchar(128)" json:"resource_id,omitempty"` ResourceKey string `gorm:"column:resource_key;type:varchar(200);not null" json:"resource_key"` DisplayName string `gorm:"column:display_name;type:varchar(255);not null;default:''" json:"display_name"` Relation string `gorm:"column:relation;type:varchar(16);not null" json:"relation"` Role string `gorm:"column:role;type:varchar(64);not null" json:"role"` IdentitySnapshot datatypes.JSON `gorm:"column:identity_snapshot;type:jsonb;not null;default:'{}'" json:"identity_snapshot"` BeforeData datatypes.JSON `gorm:"column:before_data;type:jsonb;not null;default:'{}'" json:"before_data"` AfterData datatypes.JSON `gorm:"column:after_data;type:jsonb;not null;default:'{}'" json:"after_data"` SubjectVisibility string `gorm:"column:subject_visibility;type:varchar(24);not null" json:"subject_visibility"` SubjectSummary string `gorm:"column:subject_summary;type:varchar(500);not null;default:''" json:"subject_summary,omitempty"` SubjectData datatypes.JSON `gorm:"column:subject_data;type:jsonb;not null;default:'{}'" json:"subject_data"` SortOrder int `gorm:"column:sort_order;not null;default:0" json:"sort_order"` CreatedAt time.Time `gorm:"column:created_at;type:timestamptz;not null;autoCreateTime" json:"created_at"` } // TableName 返回审计事件资源表名。 func (AuditEventResource) TableName() string { return "tb_audit_event_resource" }