package model import ( "time" "gorm.io/datatypes" ) type ChatConversation struct { ID uint64 `gorm:"primaryKey" json:"id"` OrderID uint64 `gorm:"not null;uniqueIndex" json:"order_id"` Type string `gorm:"size:32;not null;default:'order_group'" json:"type"` Title string `gorm:"size:128;not null" json:"title"` Status string `gorm:"size:32;not null;default:'active'" json:"status"` LastMessageID *uint64 `json:"last_message_id"` LastMessagePreview string `gorm:"size:255;not null;default:''" json:"last_message_preview"` LastMessageAt *time.Time `json:"last_message_at"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (ChatConversation) TableName() string { return "chat_conversations" } type ChatParticipant struct { ID uint64 `gorm:"primaryKey" json:"id"` ConversationID uint64 `gorm:"not null;index" json:"conversation_id"` ParticipantType string `gorm:"size:16;not null;index" json:"participant_type"` ParticipantID uint64 `gorm:"not null;index" json:"participant_id"` Role string `gorm:"size:32;not null" json:"role"` Remark string `gorm:"size:128;not null;default:''" json:"remark"` LastReadAt *time.Time `json:"last_read_at"` JoinedAt time.Time `json:"joined_at"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (ChatParticipant) TableName() string { return "chat_participants" } type ChatMessage struct { ID uint64 `gorm:"primaryKey" json:"id"` ConversationID uint64 `gorm:"not null;index" json:"conversation_id"` SenderType string `gorm:"size:16;not null" json:"sender_type"` SenderID uint64 `gorm:"not null;default:0" json:"sender_id"` SenderRole string `gorm:"size:32;not null;default:''" json:"sender_role"` ContentType string `gorm:"size:32;not null;default:'text'" json:"content_type"` Content string `json:"content"` AttachmentURLS datatypes.JSON `gorm:"column:attachment_urls" json:"attachment_urls"` CreatedAt time.Time `json:"created_at"` } func (ChatMessage) TableName() string { return "chat_messages" }