dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 4dd18761058bee77ef44cf415c4aa5e2e6f06d33
parent 2dc180dce8750f4e606661eeafcfa73d044a4824
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 15 Jan 2023 17:33:57 -0800

simplify code, reduce sql queries

Diffstat:
Mpkg/database/table_forum_threads.go | 8++++++++
Mpkg/web/handlers/handlers.go | 6++----
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) }