32 lines
1.2 KiB
Go
32 lines
1.2 KiB
Go
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
|
|
} |