aboutsummaryrefslogtreecommitdiffstats
path: root/models/activities
diff options
context:
space:
mode:
authorkiatt210 <40639725+kiatt210@users.noreply.github.com>2024-06-23 09:50:10 +0200
committerGitHub <noreply@github.com>2024-06-23 15:50:10 +0800
commit6a96deb5898745d957ffd7860b2b6821c673e907 (patch)
treecf75e32d502091a3ef58e48dfd9da8e58bf612a7 /models/activities
parentbda875b6e6dc9aedf9b4e72067dd5c857b95726a (diff)
downloadgitea-6a96deb5898745d957ffd7860b2b6821c673e907.tar.gz
gitea-6a96deb5898745d957ffd7860b2b6821c673e907.zip
Fix web notification icon not updated once you read all notifications (#31447)
Fix #29065 Remove status filtering from GetUIDsAndNotificationCounts sql. --------- Co-authored-by: kiatt210 <kiatt210@github.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'models/activities')
-rw-r--r--models/activities/notification.go9
1 files changed, 5 insertions, 4 deletions
diff --git a/models/activities/notification.go b/models/activities/notification.go
index dc1b8c6fae..b888adeb60 100644
--- a/models/activities/notification.go
+++ b/models/activities/notification.go
@@ -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.