Files
gochat/internal/model/channel/channel_base.go
T
2026-06-04 15:44:48 +08:00

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
}