veza/veza-backend-api/internal/models/chat_message.go

32 lines
1.6 KiB
Go
Raw Normal View History

2025-12-03 19:29:37 +00:00
package models
import (
"time"
"github.com/google/uuid"
)
type ChatMessage struct {
ID uuid.UUID `gorm:"type:uuid;primaryKey" json:"id"`
ConversationID uuid.UUID `gorm:"column:room_id;type:uuid;not null" json:"conversation_id"`
2025-12-03 19:29:37 +00:00
SenderID uuid.UUID `gorm:"type:uuid;not null" json:"sender_id"`
2026-03-06 17:58:37 +00:00
Sender *User `gorm:"foreignKey:SenderID" json:"-"` // v0.9.7: for history sender_username
2025-12-03 19:29:37 +00:00
Content string `gorm:"type:text;not null" json:"content"`
MessageType string `gorm:"type:varchar(50);not null" json:"message_type"` // text, image, audio, etc.
ParentMessageID *uuid.UUID `gorm:"-" json:"parent_message_id,omitempty"` // Not persisted; use ReplyToID for DB
2026-03-06 17:52:08 +00:00
ReplyToID *uuid.UUID `gorm:"column:reply_to_id;type:uuid" json:"reply_to_id,omitempty"`
2025-12-03 19:29:37 +00:00
IsPinned bool `gorm:"default:false;not null" json:"is_pinned"`
IsEdited bool `gorm:"default:false;not null" json:"is_edited"`
IsDeleted bool `gorm:"default:false;not null" json:"is_deleted"`
EditedAt *time.Time `json:"edited_at,omitempty"`
Status string `gorm:"type:varchar(50);not null" json:"status"` // sent, delivered, read
Metadata []byte `gorm:"type:jsonb" json:"metadata,omitempty"` // JSONB for additional data
ContentTsv *string `gorm:"type:tsvector;->" json:"-"`
2025-12-03 19:29:37 +00:00
CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"`
}
func (ChatMessage) TableName() string {
return "messages" // Rust uses 'messages' table
}