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