veza/veza-backend-api/internal/models/chat_message.go
2026-03-06 18:58:37 +01:00

31 lines
1.6 KiB
Go

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"`
SenderID uuid.UUID `gorm:"type:uuid;not null" json:"sender_id"`
Sender *User `gorm:"foreignKey:SenderID" json:"-"` // v0.9.7: for history sender_username
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
ReplyToID *uuid.UUID `gorm:"column:reply_to_id;type:uuid" json:"reply_to_id,omitempty"`
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:"-"`
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
}