package model // Channelable defines the interface for polymorphic channel configurations. // Each inbox has a channel_type (e.g. "Channel::WebWidget") and an associated // channel model that implements this interface. // Reference: P2B M2 polymorphic channel pattern type Channelable interface { // GetInboxID returns the InboxID foreign key for this channel. GetInboxID() uint // GetChannelType returns the channel type string (e.g. "Channel::WebWidget"). GetChannelType() InboxChannelType // TableName returns the GORM table name for this channel model. TableName() string } // ChannelRegistry maps channel type strings to factory functions that create Channelable instances. // This map is populated during app initialization (in app.go) to avoid import cycles // between the model and model/channel packages. // Usage: register from app.go via model.RegisterChannelFactory(...) var ChannelRegistry = map[string]func() Channelable{} // RegisterChannelFactory adds a channel type factory to the registry. // Called from app.go during initialization to wire up model/channel types // without creating a circular import between model ↔ model/channel. func RegisterChannelFactory(channelType string, factory func() Channelable) { ChannelRegistry[channelType] = factory }