Enha: use of db methods
This commit is contained in:
		| @@ -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 { | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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") | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder