commit 4dd18761058bee77ef44cf415c4aa5e2e6f06d33
parent 2dc180dce8750f4e606661eeafcfa73d044a4824
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 15 Jan 2023 17:33:57 -0800
simplify code, reduce sql queries
Diffstat:
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/pkg/database/table_forum_threads.go b/pkg/database/table_forum_threads.go
@@ -74,6 +74,14 @@ type ForumReadRecord struct {
ReadAt time.Time
}
+func UpdateForumReadRecord(userID UserID, threadID ForumThreadID) {
+ now := time.Now()
+ res := DB.Table("forum_read_records").Where("user_id = ? AND thread_id = ?", userID, threadID).Update("read_at", now)
+ if res.RowsAffected == 0 {
+ DB.Create(ForumReadRecord{UserID: userID, ThreadID: threadID, ReadAt: now})
+ }
+}
+
// DoSave user in the database, ignore error
func (u *ForumReadRecord) DoSave() {
if err := DB.Save(u).Error; err != nil {
diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go
@@ -1682,8 +1682,7 @@ func ThreadHandler(c echo.Context) error {
if authUser != nil {
data.IsSubscribed = database.IsUserSubscribedToForumThread(authUser.ID, thread.ID)
// Update read record
- database.DB.Create(database.ForumReadRecord{UserID: authUser.ID, ThreadID: thread.ID})
- database.DB.Table("forum_read_records").Where("user_id = ? AND thread_id = ?", authUser.ID, thread.ID).Update("read_at", time.Now())
+ database.UpdateForumReadRecord(authUser.ID, thread.ID)
}
return c.Render(http.StatusOK, "thread", data)
@@ -2173,8 +2172,7 @@ func ClubThreadHandler(c echo.Context) error {
data.Messages, _ = database.GetThreadMessages(threadID)
// Update read record
- database.DB.Create(database.ForumReadRecord{UserID: authUser.ID, ThreadID: threadID})
- database.DB.Table("forum_read_records").Where("user_id = ? AND thread_id = ?", authUser.ID, threadID).Update("read_at", time.Now())
+ database.UpdateForumReadRecord(authUser.ID, threadID)
return c.Render(http.StatusOK, "club.thread", data)
}