package channel import ( "time" "gorm.io/gorm" ) // ChannelBase contains common fields shared across all channel types. // This mirrors Chatwoot's "channelable" concern pattern where each channel // type (web_widget, facebook, twitter, etc.) embeds a base and adds its // own specific fields. type ChannelBase struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` AccountID uint `gorm:"index;not null" json:"account_id"` InboxID uint `gorm:"index;not null" json:"inbox_id"` ChannelType string `gorm:"size:50;index;not null" json:"channel_type"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at,omitempty"` } func (ChannelBase) TableName() string { return "channels" } // Channelable is the interface that all channel type models must implement. // Each channel (WebWidget, FacebookPage, TwitterProfile, etc.) embeds // ChannelBase and implements this interface to return its specific type. type Channelable interface { GetChannelBase() ChannelBase GetChannelType() string TableName() string }