Add thread participants to msg struct
This commit is contained in:
@@ -26,8 +26,10 @@ func Message(ctx context.Context, msg *samTypes.Message) *outgoing.Message {
|
||||
ChannelID: Uint64toa(msg.ChannelID),
|
||||
Message: msg.Message,
|
||||
Type: string(msg.Type),
|
||||
ReplyTo: msg.ReplyTo,
|
||||
Replies: msg.Replies,
|
||||
|
||||
ReplyTo: msg.ReplyTo,
|
||||
Replies: msg.Replies,
|
||||
RepliesFrom: Uint64stoa(msg.RepliesFrom),
|
||||
|
||||
User: User(msg.User),
|
||||
Attachment: Attachment(msg.Attachment),
|
||||
|
||||
@@ -11,8 +11,10 @@ type (
|
||||
Type string `json:"type"`
|
||||
Message string `json:"message"`
|
||||
ChannelID string `json:"channelID"`
|
||||
ReplyTo uint64 `json:"replyTo,omitempty,string"`
|
||||
Replies uint `json:"replies,omitempty"`
|
||||
|
||||
ReplyTo uint64 `json:"replyTo,omitempty,string"`
|
||||
Replies uint `json:"replies,omitempty"`
|
||||
RepliesFrom []string `json:"repliesFrom,omitempty"`
|
||||
|
||||
User *User `json:"user"`
|
||||
Attachment *Attachment `json:"att,omitempty"`
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/titpetric/factory"
|
||||
|
||||
"github.com/crusttech/crust/sam/types"
|
||||
@@ -16,6 +17,7 @@ type (
|
||||
FindMessageByID(id uint64) (*types.Message, error)
|
||||
FindMessages(filter *types.MessageFilter) (types.MessageSet, error)
|
||||
FindThreads(filter *types.MessageFilter) (types.MessageSet, error)
|
||||
PrefillThreadParticipants(mm types.MessageSet) error
|
||||
CreateMessage(mod *types.Message) (*types.Message, error)
|
||||
UpdateMessage(mod *types.Message) (*types.Message, error)
|
||||
DeleteMessageByID(ID uint64) error
|
||||
@@ -62,6 +64,8 @@ const (
|
||||
" WHERE " + sqlMessageScope +
|
||||
" AND original_id IN (id, reply_to)"
|
||||
|
||||
sqlThreadParticipantsByMessageID = "SELECT DISTINCT reply_to, rel_user FROM messages WHERE reply_to IN (?)"
|
||||
|
||||
sqlMessageRepliesIncCount = `UPDATE messages SET replies = replies + 1 WHERE id = ? AND reply_to = 0`
|
||||
sqlMessageRepliesDecCount = `UPDATE messages SET replies = replies - 1 WHERE id = ? AND reply_to = 0`
|
||||
|
||||
@@ -181,6 +185,25 @@ func (r *message) FindThreads(filter *types.MessageFilter) (types.MessageSet, er
|
||||
return rval, r.db().Select(&rval, sql, params...)
|
||||
}
|
||||
|
||||
func (r *message) PrefillThreadParticipants(mm types.MessageSet) error {
|
||||
var rval = []struct {
|
||||
ReplyTo uint64 `db:"reply_to"`
|
||||
UserID uint64 `db:"rel_user"`
|
||||
}{}
|
||||
|
||||
if sql, args, err := sqlx.In(sqlThreadParticipantsByMessageID, mm.IDs()); err != nil {
|
||||
return err
|
||||
} else if err = r.db().Select(&rval, sql, args...); err != nil {
|
||||
return err
|
||||
} else {
|
||||
for _, p := range rval {
|
||||
mm.FindById(p.ReplyTo).RepliesFrom = append(mm.FindById(p.ReplyTo).RepliesFrom, p.UserID)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *message) sanitizeFilter(filter *types.MessageFilter) {
|
||||
if filter == nil {
|
||||
filter = &types.MessageFilter{}
|
||||
|
||||
@@ -422,6 +422,10 @@ func (svc *message) preload(mm types.MessageSet) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
if err = svc.message.PrefillThreadParticipants(mm); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -22,7 +22,9 @@ type (
|
||||
Attachment *Attachment `json:"attachment,omitempty"`
|
||||
User *systemTypes.User `json:"user,omitempty"`
|
||||
Flags MessageFlagSet `json:"flags,omitempty"`
|
||||
Mentions MentionSet
|
||||
|
||||
Mentions MentionSet
|
||||
RepliesFrom []uint64
|
||||
}
|
||||
|
||||
MessageSet []*Message
|
||||
|
||||
Reference in New Issue
Block a user