Enha: use of db methods

This commit is contained in:
Grail Finder
2025-07-02 12:55:50 +03:00
parent b66f9c4c06
commit 9973546aad
6 changed files with 89 additions and 78 deletions

View File

@ -60,34 +60,34 @@ func createRoom(ctx context.Context, req *models.RoomReq) (*models.Room, error)
// context
func getStateByCtx(ctx context.Context) (*models.UserState, error) {
username, ok := ctx.Value(models.CtxUsernameKey).(string)
if !ok {
log.Debug("no username in ctx")
return &models.UserState{}, errors.New("no username in ctx")
}
us, err := loadState(username)
if err != nil {
return &models.UserState{}, err
}
return us, nil
}
// func getStateByCtx(ctx context.Context) (*models.UserState, error) {
// username, ok := ctx.Value(models.CtxUsernameKey).(string)
// if !ok {
// log.Debug("no username in ctx")
// return &models.UserState{}, errors.New("no username in ctx")
// }
// us, err := loadState(username)
// if err != nil {
// return &models.UserState{}, err
// }
// return us, nil
// }
// func dbCreate(fi *models.FullInfo) error{
// repo.CreateRoom()
// }
// func saveFullInfo(fi *models.FullInfo) error {
// // INFO: no transactions; so case is possible where first object is updated but the second is not
// if err := saveState(fi.State.Username, fi.State); err != nil {
// return err
// }
// log.Debug("saved user state", "state", fi.State)
// if err := saveRoom(fi.Room); err != nil {
// return err
// }
// return nil
// }
func saveFullInfo(fi *models.FullInfo) error {
// INFO: no transactions; so case is possible where first object is updated but the second is not
if err := repo.PlayerUpdate(fi.State); err != nil {
return err
}
log.Debug("saved user state", "state", fi.State)
if err := repo.RoomUpdate(context.Background(), fi.Room); err != nil {
return err
}
return nil
}
func notifyBotIfNeeded(room *models.Room) {
if botName := room.WhichBotToMove(); botName != "" {
@ -229,24 +229,24 @@ func joinTeam(ctx context.Context, role, team string) (*models.FullInfo, error)
}
// get all rooms
func listRooms(allRooms bool) []*models.Room {
cacheMap := memcache.GetAll()
publicRooms := []*models.Room{}
// no way to know if room is public until unmarshal -_-;
for key, value := range cacheMap {
if strings.HasPrefix(key, models.CacheRoomPrefix) {
room := &models.Room{}
if err := json.Unmarshal(value, &room); err != nil {
log.Warn("failed to unmarshal room", "error", err)
continue
}
if room.IsPublic || allRooms {
publicRooms = append(publicRooms, room)
}
}
}
return publicRooms
}
// func listRooms(allRooms bool) []*models.Room {
// cacheMap := memcache.GetAll()
// publicRooms := []*models.Room{}
// // no way to know if room is public until unmarshal -_-;
// for key, value := range cacheMap {
// if strings.HasPrefix(key, models.CacheRoomPrefix) {
// room := &models.Room{}
// if err := json.Unmarshal(value, &room); err != nil {
// log.Warn("failed to unmarshal room", "error", err)
// continue
// }
// if room.IsPublic || allRooms {
// publicRooms = append(publicRooms, room)
// }
// }
// }
// return publicRooms
// }
// get bots
func listBots() map[string]map[string]string {

View File

@ -91,23 +91,31 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
// check if room_id provided and exists
if roomID != "" {
log.Debug("got room_id in login", "room_id", roomID)
room, err := getRoomByID(roomID)
// room, err := getRoomByID(roomID)
room, err := repo.RoomGetByID(r.Context(), roomID)
if err != nil {
abortWithError(w, err.Error())
return
}
// room.PlayerList = append(room.PlayerList, fi.State.Username)
fi.State.RoomID = room.ID
fi.Room = room
fi.List = nil
fi.State.RoomID = room.ID
repo.PlayerSetRoomID(fi.State.Username, room.ID)
// repo.RoomUpdate()
// save full info instead
if err := saveFullInfo(fi); err != nil {
// if err := saveFullInfo(fi); err != nil {
// abortWithError(w, err.Error())
// return
// }
} else {
log.Debug("no room_id in login")
// fi.List = listRooms(false)
fi.List, err = repo.RoomList(r.Context())
if err != nil {
abortWithError(w, err.Error())
return
}
} else {
log.Debug("no room_id in login")
fi.List = listRooms(false)
// save state to cache
// if err := saveState(cleanName, userstate); err != nil {
if err := repo.PlayerUpdate(userstate); err != nil {

View File

@ -42,17 +42,20 @@ func HandleCreateRoom(w http.ResponseWriter, r *http.Request) {
}
fi.State.RoomID = room.ID
fi.Room = room
fi.Room.IsPublic = true // hardcode for local test; move to form
if err := repo.CreateRoom(r.Context(), room); err != nil {
if err := repo.RoomCreate(r.Context(), room); err != nil {
abortWithError(w, err.Error())
return
}
if err := saveFullInfo(fi); err != nil {
msg := "failed to set current room to session"
log.Error(msg, "error", err)
abortWithError(w, msg)
if err := repo.PlayerSetRoomID(fi.State.Username, room.ID); err != nil {
abortWithError(w, err.Error())
return
}
// if err := saveFullInfo(fi); err != nil {
// msg := "failed to set current room to session"
// log.Error(msg, "error", err)
// abortWithError(w, msg)
// return
// }
notify(models.NotifyRoomListUpdate, "")
tmpl, err := template.ParseGlob("components/*.html")
if err != nil {
@ -198,7 +201,7 @@ func HandleStartGame(w http.ResponseWriter, r *http.Request) {
func HandleJoinRoom(w http.ResponseWriter, r *http.Request) {
roomID := r.URL.Query().Get("id")
room, err := getRoomByID(roomID)
room, err := repo.RoomGetByID(r.Context(), roomID)
if err != nil {
abortWithError(w, err.Error())
return

View File

@ -60,7 +60,7 @@ func HandleHome(w http.ResponseWriter, r *http.Request) {
}
}
if fi != nil && fi.Room == nil {
rooms, err := repo.ListRooms(r.Context())
rooms, err := repo.RoomList(r.Context())
if err != nil {
log.Error("failed to list rooms;", "error", err)
}
@ -96,7 +96,7 @@ func HandleExit(w http.ResponseWriter, r *http.Request) {
// return
// }
if creatorLeft {
if err := repo.DeleteRoomByID(r.Context(), exitedRoom.ID); err != nil {
if err := repo.RoomDeleteByID(r.Context(), exitedRoom.ID); err != nil {
log.Error("failed to remove room", "error", err)
}
// removeRoom(exitedRoom.ID)
@ -105,7 +105,7 @@ func HandleExit(w http.ResponseWriter, r *http.Request) {
notify(models.NotifyRoomListUpdate, "")
}
// scary to update the whole room
if err := repo.UpdateRoom(r.Context(), exitedRoom); err != nil {
if err := repo.RoomUpdate(r.Context(), exitedRoom); err != nil {
abortWithError(w, err.Error())
return
}
@ -113,7 +113,12 @@ func HandleExit(w http.ResponseWriter, r *http.Request) {
abortWithError(w, err.Error())
return
}
fi.List = listRooms(false)
// fi.List = listRooms(false)
fi.List, err = repo.RoomList(r.Context())
if err != nil {
abortWithError(w, err.Error())
return
}
if err := tmpl.ExecuteTemplate(w, "base", fi); err != nil {
log.Error("failed to exec templ;", "error", err, "templ", "base")
}