diff options
Diffstat (limited to 'internal/server/api')
| -rw-r--r-- | internal/server/api/api.go | 10 | ||||
| -rw-r--r-- | internal/server/api/helpers.go | 7 |
2 files changed, 14 insertions, 3 deletions
diff --git a/internal/server/api/api.go b/internal/server/api/api.go index 92679b8..e087268 100644 --- a/internal/server/api/api.go +++ b/internal/server/api/api.go @@ -156,6 +156,16 @@ func SendMessage(ctx context.Context, sess *session.Session, request *packet.Sen return &ErrInternalError } + err = queries.InsertLastReadMessage(ctx, data.InsertLastReadMessageParams{ + UserID: *request.ReceiverID, + SourceID: sess.ID(), + LastRead: 0, + }) + if err != nil { + log.Println("database error 7:", err) + return &ErrInternalError + } + return UserPropagate(ctx, sess, user.ID, &packet.MessagesInfo{ Messages: []data.Message{message}, RemovedMessages: nil, diff --git a/internal/server/api/helpers.go b/internal/server/api/helpers.go index 2daeb9f..4327a49 100644 --- a/internal/server/api/helpers.go +++ b/internal/server/api/helpers.go @@ -151,15 +151,16 @@ SELECT e.source_id, e.last_read, CASE WHEN COUNT(m.id) = 0 THEN NULL - ELSE SUM(CASE WHEN (m.ping = 0 OR (m.ping = 1 AND pf.is_admin = true) OR m.ping = ?) THEN 1 ELSE 0 END) + ELSE SUM(CASE WHEN (m.frequency_id IS NULL OR + m.ping = 0 OR (m.ping = 1 AND pf.is_admin = true) OR m.ping = ?) THEN 1 ELSE 0 END) -- 0 is @everyone, 1 is @admins, otherwise it's user_id END AS pings FROM entries e +LEFT JOIN permitted_frequencies pf ON e.source_id = pf.id LEFT JOIN messages m ON m.id > e.last_read - AND (m.frequency_id = e.source_id OR + AND ((m.frequency_id = e.source_id AND pf.id IS NOT NULL) OR (m.receiver_id = e.source_id AND m.sender_id = ?) OR (m.sender_id = e.source_id AND m.receiver_id = ?)) -JOIN permitted_frequencies pf ON e.source_id = pf.id GROUP BY e.source_id, e.last_read; ` |
