diff --git a/components/createroomform.html b/components/createroomform.html index 872b077..a347c61 100644 --- a/components/createroomform.html +++ b/components/createroomform.html @@ -4,15 +4,13 @@ Create a room
or
-
-
-
+
-
+

-
+

-
+
diff --git a/handlers/actions.go b/handlers/actions.go index 4f51860..24a502e 100644 --- a/handlers/actions.go +++ b/handlers/actions.go @@ -75,6 +75,10 @@ func saveFullInfo(fi *models.FullInfo) error { if err := saveState(fi.State.Username, fi.State); err != nil { return err } + // can room be nil? + // if fi.Room == nil { + // return nil + // } if err := saveRoom(fi.Room); err != nil { return err } @@ -126,19 +130,24 @@ func getAllNames() []string { return names } +// can room exists without state? I think no func getFullInfoByCtx(ctx context.Context) (*models.FullInfo, error) { + resp := &models.FullInfo{} state, err := getStateByCtx(ctx) if err != nil { return nil, err } + resp.State = state + if state.RoomID == "" { + return resp, nil + } room, err := getRoomByID(state.RoomID) if err != nil { + log.Warn("failed to find room despite knowing room_id;", + "room_id", state.RoomID) return nil, err } - resp := &models.FullInfo{ - State: state, - Room: room, - } + resp.Room = room return resp, nil } diff --git a/handlers/auth.go b/handlers/auth.go index bc4f2ae..8726b1d 100644 --- a/handlers/auth.go +++ b/handlers/auth.go @@ -72,16 +72,20 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) { abortWithError(w, err.Error()) return } - state := models.MakeTestState(cleanName) - state.State.Username = cleanName + // state := models.MakeTestState(cleanName) + // state.State.Username = cleanName + userstate := models.InitState(cleanName) + fi := &models.FullInfo{ + State: userstate, + } // save state to cache - // if err := saveState(cleanName, state.State); err != nil { - if err := saveFullInfo(state); err != nil { + if err := saveState(cleanName, userstate); err != nil { + // if err := saveFullInfo(fi); err != nil { log.Error("failed to save state", "error", err) abortWithError(w, err.Error()) return } - tmpl.ExecuteTemplate(w, "base", state) + tmpl.ExecuteTemplate(w, "base", fi) } func makeCookie(username string, remote string) (*http.Cookie, error) { @@ -152,7 +156,7 @@ func cacheSetSession(key string, session *models.Session) error { } func updateRoomInSession(ctx context.Context, roomID string) (context.Context, error) { - s, ok := ctx.Value("session").(models.Session) + s, ok := ctx.Value(models.CtxSessionKey).(*models.Session) if !ok { return context.TODO(), errors.New("failed to extract session from ctx") } diff --git a/handlers/game.go b/handlers/game.go index 9f5f8c0..73889d5 100644 --- a/handlers/game.go +++ b/handlers/game.go @@ -23,8 +23,16 @@ func HandleCreateRoom(w http.ResponseWriter, r *http.Request) { return } ctx := context.WithValue(r.Context(), "current_room", room.ID) - ctx, err = updateRoomInSession(ctx, room.ID) + fi, err := getFullInfoByCtx(ctx) if err != nil { + msg := "failed to get full info from ctx" + log.Error(msg, "error", err) + abortWithError(w, msg) + return + } + fi.State.RoomID = room.ID + fi.Room = room + if err := saveFullInfo(fi); err != nil { msg := "failed to set current room to session" log.Error(msg, "error", err) abortWithError(w, msg) @@ -41,7 +49,7 @@ func HandleCreateRoom(w http.ResponseWriter, r *http.Request) { abortWithError(w, err.Error()) return } - tmpl.ExecuteTemplate(w, "base", nil) + tmpl.ExecuteTemplate(w, "base", fi) } func HandleRoomEnter(w http.ResponseWriter, r *http.Request) { diff --git a/handlers/middleware.go b/handlers/middleware.go index 6e6ec66..1b0c355 100644 --- a/handlers/middleware.go +++ b/handlers/middleware.go @@ -41,6 +41,7 @@ func LogRequests(next http.Handler) http.Handler { func GetSession(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // TODO: move cookieName := "session_token" sessionCookie, err := r.Cookie(cookieName) if err != nil { diff --git a/main.go b/main.go index 431f52c..f06fd9f 100644 --- a/main.go +++ b/main.go @@ -25,6 +25,7 @@ func ListenToRequests(port string) error { mux.HandleFunc("GET /room", handlers.HandleRoomEnter) mux.HandleFunc("POST /join-team", handlers.HandleJoinTeam) mux.HandleFunc("GET /end-turn", handlers.HandleEndTurn) + mux.HandleFunc("POST /room-create", handlers.HandleCreateRoom) //elements mux.HandleFunc("GET /room/createform", handlers.HandleShowCreateForm) mux.HandleFunc("GET /room/hideform", handlers.HandleHideCreateForm)