Skip to content

Commit 9be9042

Browse files
GiteaBotlunny
andauthored
Fix bug with sqlite load read (#26305) (#26339)
Backport #26305 by @lunny Possible fix #26280 Co-authored-by: Lunny Xiao <[email protected]>
1 parent 9451781 commit 9be9042

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

models/activities/notification.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ func createIssueNotification(ctx context.Context, userID int64, issue *issues_mo
310310
}
311311

312312
func updateIssueNotification(ctx context.Context, userID, issueID, commentID, updatedByID int64) error {
313-
notification, err := getIssueNotification(ctx, userID, issueID)
313+
notification, err := GetIssueNotification(ctx, userID, issueID)
314314
if err != nil {
315315
return err
316316
}
@@ -331,7 +331,8 @@ func updateIssueNotification(ctx context.Context, userID, issueID, commentID, up
331331
return err
332332
}
333333

334-
func getIssueNotification(ctx context.Context, userID, issueID int64) (*Notification, error) {
334+
// GetIssueNotification return the notification about an issue
335+
func GetIssueNotification(ctx context.Context, userID, issueID int64) (*Notification, error) {
335336
notification := new(Notification)
336337
_, err := db.GetEngine(ctx).
337338
Where("user_id = ?", userID).
@@ -742,15 +743,15 @@ func GetUIDsAndNotificationCounts(since, until timeutil.TimeStamp) ([]UserIDCoun
742743

743744
// SetIssueReadBy sets issue to be read by given user.
744745
func SetIssueReadBy(ctx context.Context, issueID, userID int64) error {
745-
if err := issues_model.UpdateIssueUserByRead(userID, issueID); err != nil {
746+
if err := issues_model.UpdateIssueUserByRead(ctx, userID, issueID); err != nil {
746747
return err
747748
}
748749

749750
return setIssueNotificationStatusReadIfUnread(ctx, userID, issueID)
750751
}
751752

752753
func setIssueNotificationStatusReadIfUnread(ctx context.Context, userID, issueID int64) error {
753-
notification, err := getIssueNotification(ctx, userID, issueID)
754+
notification, err := GetIssueNotification(ctx, userID, issueID)
754755
// ignore if not exists
755756
if err != nil {
756757
return nil
@@ -762,7 +763,7 @@ func setIssueNotificationStatusReadIfUnread(ctx context.Context, userID, issueID
762763

763764
notification.Status = NotificationStatusRead
764765

765-
_, err = db.GetEngine(ctx).ID(notification.ID).Update(notification)
766+
_, err = db.GetEngine(ctx).ID(notification.ID).Cols("status").Update(notification)
766767
return err
767768
}
768769

models/activities/notification_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package activities_test
55

66
import (
7+
"context"
78
"testing"
89

910
activities_model "code.gitea.io/gitea/models/activities"
@@ -109,3 +110,16 @@ func TestUpdateNotificationStatuses(t *testing.T) {
109110
unittest.AssertExistsAndLoadBean(t,
110111
&activities_model.Notification{ID: notfPinned.ID, Status: activities_model.NotificationStatusPinned})
111112
}
113+
114+
func TestSetIssueReadBy(t *testing.T) {
115+
assert.NoError(t, unittest.PrepareTestDatabase())
116+
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
117+
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
118+
assert.NoError(t, db.WithTx(db.DefaultContext, func(ctx context.Context) error {
119+
return activities_model.SetIssueReadBy(ctx, issue.ID, user.ID)
120+
}))
121+
122+
nt, err := activities_model.GetIssueNotification(db.DefaultContext, user.ID, issue.ID)
123+
assert.NoError(t, err)
124+
assert.EqualValues(t, activities_model.NotificationStatusRead, nt.Status)
125+
}

models/issues/issue_user.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ func NewIssueUsers(ctx context.Context, repo *repo_model.Repository, issue *Issu
5555
}
5656

5757
// UpdateIssueUserByRead updates issue-user relation for reading.
58-
func UpdateIssueUserByRead(uid, issueID int64) error {
59-
_, err := db.GetEngine(db.DefaultContext).Exec("UPDATE `issue_user` SET is_read=? WHERE uid=? AND issue_id=?", true, uid, issueID)
58+
func UpdateIssueUserByRead(ctx context.Context, uid, issueID int64) error {
59+
_, err := db.GetEngine(ctx).Exec("UPDATE `issue_user` SET is_read=? WHERE uid=? AND issue_id=?", true, uid, issueID)
6060
return err
6161
}
6262

models/issues/issue_user_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ func TestUpdateIssueUserByRead(t *testing.T) {
4040
assert.NoError(t, unittest.PrepareTestDatabase())
4141
issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1})
4242

43-
assert.NoError(t, issues_model.UpdateIssueUserByRead(4, issue.ID))
43+
assert.NoError(t, issues_model.UpdateIssueUserByRead(db.DefaultContext, 4, issue.ID))
4444
unittest.AssertExistsAndLoadBean(t, &issues_model.IssueUser{IssueID: issue.ID, UID: 4}, "is_read=1")
4545

46-
assert.NoError(t, issues_model.UpdateIssueUserByRead(4, issue.ID))
46+
assert.NoError(t, issues_model.UpdateIssueUserByRead(db.DefaultContext, 4, issue.ID))
4747
unittest.AssertExistsAndLoadBean(t, &issues_model.IssueUser{IssueID: issue.ID, UID: 4}, "is_read=1")
4848

49-
assert.NoError(t, issues_model.UpdateIssueUserByRead(unittest.NonexistentID, unittest.NonexistentID))
49+
assert.NoError(t, issues_model.UpdateIssueUserByRead(db.DefaultContext, unittest.NonexistentID, unittest.NonexistentID))
5050
}
5151

5252
func TestUpdateIssueUsersByMentions(t *testing.T) {

0 commit comments

Comments
 (0)