From db6d5f5189af3160a8117b9df4aa08f28cbf080c Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Wed, 18 Oct 2023 15:08:16 +0800 Subject: [PATCH] Fix: room list void room pointer --- internal/bootstrap/room.go | 2 +- internal/db/room.go | 18 ++++++++++++------ internal/op/rooms.go | 24 ++++++------------------ internal/op/users.go | 8 ++++++++ server/handlers/movie.go | 16 ++-------------- server/handlers/room.go | 8 ++------ 6 files changed, 31 insertions(+), 45 deletions(-) diff --git a/internal/bootstrap/room.go b/internal/bootstrap/room.go index 2b08915..7e67c46 100644 --- a/internal/bootstrap/room.go +++ b/internal/bootstrap/room.go @@ -14,7 +14,7 @@ func InitRoom(ctx context.Context) error { return err } for _, room := range r { - r, err := op.LoadRoom(&room) + r, err := op.LoadRoom(room) if err != nil { log.Errorf("load room error: %v", err) return err diff --git a/internal/db/room.go b/internal/db/room.go index f1191f8..bbac9f1 100644 --- a/internal/db/room.go +++ b/internal/db/room.go @@ -45,15 +45,15 @@ func CreateRoom(name, password string, conf ...CreateRoomConfig) (*model.Room, e return r, db.Create(r).Error } -func GetRoomByName(name string) (*model.Room, error) { +func GetRoomByID(id uint) (*model.Room, error) { r := &model.Room{} - err := db.Where("name = ?", name).First(r).Error + err := db.Where("id = ?", id).First(r).Error return r, err } -func GetRoomByID(id uint) (*model.Room, error) { +func GetRoomAndCreatorByID(id uint) (*model.Room, error) { r := &model.Room{} - err := db.Where("id = ?", id).First(r).Error + err := db.Preload("Creator").Where("id = ?", id).First(r).Error return r, err } @@ -128,8 +128,14 @@ func RemoveUserPermission(roomID uint, userID uint, permission model.Permission) return db.Model(&model.RoomUserRelation{}).Where("room_id = ? AND user_id = ?", roomID, userID).Update("permissions", db.Raw("permissions & ?", ^permission)).Error } -func GetAllRooms() ([]model.Room, error) { - rooms := []model.Room{} +func GetAllRooms() ([]*model.Room, error) { + rooms := []*model.Room{} err := db.Find(&rooms).Error return rooms, err } + +func GetAllRoomsAndCreator() ([]*model.Room, error) { + rooms := []*model.Room{} + err := db.Preload("Creater").Find(&rooms).Error + return rooms, err +} diff --git a/internal/op/rooms.go b/internal/op/rooms.go index 769cc28..8453dbe 100644 --- a/internal/op/rooms.go +++ b/internal/op/rooms.go @@ -55,28 +55,16 @@ func DeleteRoom(room *Room) error { return db.DeleteRoomByID(room.ID) } -func GetRoomByName(name string) (*Room, error) { - r, err := db.GetRoomByName(name) - if err != nil { - return nil, err - } - r2, ok := roomCache.Load(r.ID) - if !ok { - return initRoom(r) - } - return r2, nil -} - func GetRoomByID(id uint) (*Room, error) { + r2, ok := roomCache.Load(id) + if ok { + return r2, nil + } r, err := db.GetRoomByID(id) if err != nil { return nil, err } - r2, ok := roomCache.Load(r.ID) - if !ok { - return initRoom(r) - } - return r2, nil + return initRoom(r) } func HasRoom(roomID uint) bool { @@ -128,7 +116,7 @@ func GetAllRoomsWithNoNeedPassword() []*Room { } func GetAllRoomsWithoutHidden() []*Room { - rooms := make([]*Room, roomCache.Len()) + rooms := make([]*Room, 0, roomCache.Len()) roomCache.Range(func(key uint, value *Room) bool { if !value.Setting.Hidden { rooms = append(rooms, value) diff --git a/internal/op/users.go b/internal/op/users.go index 68c65f4..3360d8a 100644 --- a/internal/op/users.go +++ b/internal/op/users.go @@ -101,3 +101,11 @@ func UpdateUser(u *model.User) error { userCache.Remove(u.ID) return db.UpdateUser(u) } + +func GetUserName(userID uint) string { + u, err := GetUserById(userID) + if err != nil { + return "" + } + return u.Username +} diff --git a/server/handlers/movie.go b/server/handlers/movie.go index 8793aec..03e1e6c 100644 --- a/server/handlers/movie.go +++ b/server/handlers/movie.go @@ -62,18 +62,12 @@ func MovieList(ctx *gin.Context) { } mresp := make([]model.MoviesResp, len(m)) - var creater string for i, v := range m { - // get cteater - u, err := op.GetUserById(v.CreatorID) - if err == nil { - creater = u.Username - } mresp[i] = model.MoviesResp{ Id: v.ID, Base: m[i].BaseMovieInfo, PullKey: v.PullKey, - Creater: creater, + Creater: op.GetUserName(v.CreatorID), } } @@ -116,18 +110,12 @@ func Movies(ctx *gin.Context) { } mresp := make([]model.MoviesResp, len(m)) - var creater string for i, v := range m { - // get cteater - u, err := op.GetUserById(v.CreatorID) - if err == nil { - creater = u.Username - } mresp[i] = model.MoviesResp{ Id: v.ID, Base: m[i].BaseMovieInfo, PullKey: v.PullKey, - Creater: creater, + Creater: op.GetUserName(v.CreatorID), } } diff --git a/server/handlers/room.go b/server/handlers/room.go index 1cbc16c..b7d63ab 100644 --- a/server/handlers/room.go +++ b/server/handlers/room.go @@ -66,17 +66,13 @@ func RoomList(ctx *gin.Context) { }), vec.WithCmpEqual[*model.RoomListResp](func(v1, v2 *model.RoomListResp) bool { return v1.PeopleNum == v2.PeopleNum })) - var Creator string for _, v := range r { - u, err := op.GetUserById(v.Room.CreatorID) - if err == nil { - Creator = u.Username - } resp.Push(&model.RoomListResp{ RoomId: v.ID, + RoomName: v.Name, PeopleNum: v.Hub().ClientNum(), NeedPassword: v.NeedPassword(), - Creator: Creator, + Creator: op.GetUserName(v.Room.CreatorID), CreatedAt: v.Room.CreatedAt.UnixMilli(), }) }