package model import ( "encoding/json" "time" ) // 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 their model structs. // Used by Inbox to resolve the polymorphic Channel association. var ChannelRegistry = map[string]func() Channelable{ "Channel::WebWidget": func() Channelable { return &ChannelWebWidget{} }, "Channel::Telegram": func() Channelable { return &ChannelTelegram{} }, "Channel::FacebookPage": func() Channelable { return &ChannelFacebookPage{} }, "Channel::Whatsapp": func() Channelable { return &ChannelWhatsapp{} }, "Channel::Email": func() Channelable { return &ChannelEmail{} }, "Channel::Api": func() Channelable { return &ChannelAPI{} }, "Channel::TwilioSms": func() Channelable { return &ChannelTwilioSMS{} }, "Channel::Line": func() Channelable { return &ChannelLine{} }, "Channel::Sms": func() Channelable { return &ChannelSms{} }, "Channel::Instagram": func() Channelable { return &ChannelInstagram{} }, "Channel::Tiktok": func() Channelable { return &ChannelTiktok{} }, }