Enha: state to hold room_id instead of whole room
This commit is contained in:
		| @@ -8,7 +8,25 @@ import ( | ||||
| ) | ||||
|  | ||||
| func createRoom(ctx context.Context, req *models.RoomReq) (*models.Room, error) { | ||||
| 	return nil, nil | ||||
| 	creator, ok := ctx.Value(models.CtxUsernameKey).(string) | ||||
| 	if !ok { | ||||
| 		err := errors.New("failed to extract user from ctx") | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	room := req.CreateRoom(creator) | ||||
| 	if err := saveRoom(room); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return room, nil | ||||
| } | ||||
|  | ||||
| func saveRoom(room *models.Room) error { | ||||
| 	data, err := json.Marshal(room) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	memcache.Set(models.CacheRoomPrefix+room.ID, data) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func getRoomByID(roomID string) (*models.Room, error) { | ||||
| @@ -86,3 +104,19 @@ func getAllNames() []string { | ||||
| 	} | ||||
| 	return names | ||||
| } | ||||
|  | ||||
| func getFullInfoByCtx(ctx context.Context) (*models.FullInfo, error) { | ||||
| 	state, err := getStateByCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	room, err := getRoomByID(state.RoomID) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	resp := &models.FullInfo{ | ||||
| 		State: state, | ||||
| 		Room:  room, | ||||
| 	} | ||||
| 	return resp, nil | ||||
| } | ||||
|   | ||||
| @@ -80,9 +80,9 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) { | ||||
| 	// } | ||||
| 	// state := models.InitState(cleanName) | ||||
| 	state := models.MakeTestState() | ||||
| 	state.Username = cleanName | ||||
| 	state.State.Username = cleanName | ||||
| 	// save state to cache | ||||
| 	saveState(cleanName, state) | ||||
| 	saveState(cleanName, state.State) | ||||
| 	tmpl.ExecuteTemplate(w, "base", state) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -79,3 +79,26 @@ func HandleRoomEnter(w http.ResponseWriter, r *http.Request) { | ||||
| 	} | ||||
| 	tmpl.ExecuteTemplate(w, "base", room) | ||||
| } | ||||
|  | ||||
| func HandleJoinTeam(w http.ResponseWriter, r *http.Request) { | ||||
| 	// parse payload | ||||
| 	team := r.URL.Query().Get("team") | ||||
| 	role := r.URL.Query().Get("role") | ||||
| 	if team == "" || role == "" { | ||||
| 		msg := "missing team or role" | ||||
| 		log.Error(msg) | ||||
| 		abortWithError(w, msg) | ||||
| 		// error | ||||
| 		return | ||||
| 	} | ||||
| 	// get username | ||||
| 	// get state | ||||
| 	// get room | ||||
| 	// return html | ||||
| 	tmpl, err := template.ParseGlob("components/*.html") | ||||
| 	if err != nil { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	tmpl.ExecuteTemplate(w, "base", nil) | ||||
| } | ||||
|   | ||||
| @@ -2,7 +2,6 @@ package handlers | ||||
|  | ||||
| import ( | ||||
| 	"golias/config" | ||||
| 	"golias/models" | ||||
| 	"golias/pkg/cache" | ||||
| 	"html/template" | ||||
| 	"log/slog" | ||||
| @@ -63,13 +62,8 @@ func HandleHome(w http.ResponseWriter, r *http.Request) { | ||||
| 		abortWithError(w, err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	userState, _ := getStateByCtx(r.Context()) | ||||
| 	if userState == nil { | ||||
| 		userState = &models.UserState{} | ||||
| 	fi, _ := getFullInfoByCtx(r.Context()) | ||||
| 	if err := tmpl.ExecuteTemplate(w, "base", fi); err != nil { | ||||
| 		log.Error("failed to exec templ;", "error", err, "templ", "base") | ||||
| 	} | ||||
| 	// if err != nil { | ||||
| 	// abortWithError(w, err.Error()) | ||||
| 	// return | ||||
| 	// } | ||||
| 	tmpl.ExecuteTemplate(w, "base", userState) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Grail Finder
					Grail Finder