]> source.dussan.org Git - gitea.git/commitdiff
Fix web notification icon not updated once you read all notifications (#31447) (...
authorGiteabot <teabot@gitea.io>
Sun, 23 Jun 2024 16:08:37 +0000 (00:08 +0800)
committerGitHub <noreply@github.com>
Sun, 23 Jun 2024 16:08:37 +0000 (00:08 +0800)
Backport #31447 by kiatt210

Fix #29065
Remove status filtering from GetUIDsAndNotificationCounts sql.

Co-authored-by: kiatt210 <40639725+kiatt210@users.noreply.github.com>
Co-authored-by: kiatt210 <kiatt210@github.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
models/activities/notification.go

index dc1b8c6fae91a9c888df109a7e11a7b2c280c7bb..b888adeb60fe524c8b5059919574017029a2b8d9 100644 (file)
@@ -286,13 +286,14 @@ type UserIDCount struct {
        Count  int64
 }
 
-// GetUIDsAndNotificationCounts between the two provided times
+// GetUIDsAndNotificationCounts returns the unread counts for every user between the two provided times.
+// It must return all user IDs which appear during the period, including count=0 for users who have read all.
 func GetUIDsAndNotificationCounts(ctx context.Context, since, until timeutil.TimeStamp) ([]UserIDCount, error) {
-       sql := `SELECT user_id, count(*) AS count FROM notification ` +
+       sql := `SELECT user_id, sum(case when status= ? then 1 else 0 end) AS count FROM notification ` +
                `WHERE user_id IN (SELECT user_id FROM notification WHERE updated_unix >= ? AND ` +
-               `updated_unix < ?) AND status = ? GROUP BY user_id`
+               `updated_unix < ?) GROUP BY user_id`
        var res []UserIDCount
-       return res, db.GetEngine(ctx).SQL(sql, since, until, NotificationStatusUnread).Find(&res)
+       return res, db.GetEngine(ctx).SQL(sql, NotificationStatusUnread, since, until).Find(&res)
 }
 
 // SetIssueReadBy sets issue to be read by given user.