From e48e851c74107a69293f8b5d0bfd719e32c84ec6 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Wed, 17 Apr 2024 15:16:51 +0800 Subject: [PATCH] Opt: lazy load room settings --- internal/db/room.go | 11 ++++++++++- internal/op/rooms.go | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/internal/db/room.go b/internal/db/room.go index b6755b9..0c01a53 100644 --- a/internal/db/room.go +++ b/internal/db/room.go @@ -47,6 +47,9 @@ func WithStatus(status model.RoomStatus) CreateRoomConfig { func WithSettingHidden(hidden bool) CreateRoomConfig { return func(r *model.Room) { + if r.Settings == nil { + r.Settings = model.DefaultRoomSettings() + } r.Settings.Hidden = hidden } } @@ -94,11 +97,17 @@ func GetRoomByID(id string) (*model.Room, error) { r := &model.Room{} err := db. Where("id = ?", id). - Preload("Settings", "id = ?", id). First(r).Error return r, HandleNotFound(err, "room") } +func GetOrCreateRoomSettings(roomID string) (*model.RoomSettings, error) { + rs := model.DefaultRoomSettings() + rs.ID = roomID + err := db.FirstOrCreate(rs, rs).Error + return rs, err +} + func SaveRoomSettings(roomID string, settings *model.RoomSettings) error { settings.ID = roomID err := db.Save(settings).Error diff --git a/internal/op/rooms.go b/internal/op/rooms.go index f212ef2..3d40498 100644 --- a/internal/op/rooms.go +++ b/internal/op/rooms.go @@ -145,6 +145,11 @@ func LoadOrInitRoomByID(id string) (*RoomEntry, error) { if err != nil { return nil, err } + settings, err := db.GetOrCreateRoomSettings(room.ID) + if err != nil { + return nil, err + } + room.Settings = settings return LoadOrInitRoom(room) }