Add thread participants to msg struct

This commit is contained in:
Denis Arh
2018-11-14 05:57:55 +01:00
parent 01dee6f85c
commit 0f1f545b90
5 changed files with 38 additions and 5 deletions
+4 -2
View File
@@ -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),
+4 -2
View File
@@ -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"`
+23
View File
@@ -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{}
+4
View File
@@ -422,6 +422,10 @@ func (svc *message) preload(mm types.MessageSet) (err error) {
return
}
if err = svc.message.PrefillThreadParticipants(mm); err != nil {
return
}
return
}
+3 -1
View File
@@ -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