From 201b3760da7ded956f2bc967fb79a4d5e825a8a3 Mon Sep 17 00:00:00 2001 From: efim Date: Mon, 30 Oct 2023 03:49:48 +0000 Subject: [PATCH] feat: toggling Create/Join room button --- rooms/rooms_manager.go | 11 +++++++---- routes/login_page.go | 32 ++++++++++++++++++++++++++++---- routes/static/out.css | 4 ++++ routes/templates/login.gohtml | 18 +++++++++++++----- 4 files changed, 52 insertions(+), 13 deletions(-) diff --git a/rooms/rooms_manager.go b/rooms/rooms_manager.go index 08f5ee3..49228df 100644 --- a/rooms/rooms_manager.go +++ b/rooms/rooms_manager.go @@ -40,7 +40,7 @@ func (r *Room) UnmarshalBinary(data []byte) error { var ctx = context.Background() type RoomManager interface { - Get(roomName string) (Room, error) // but we need Get by name + Get(roomName string) (Room, bool, error) Save(room Room) error } const roomRedisPrefix = "room" @@ -53,15 +53,18 @@ type RedisRM struct { Rdb *redis.Client } -func (redisRM RedisRM) Get(roomName string) (Room, error) { +func (redisRM RedisRM) Get(roomName string) (Room, bool, error) { var readRoom Room err := redisRM.Rdb.Get(ctx, roomNameToRedisId(roomName)).Scan(&readRoom) + if err == redis.Nil { + return Room{}, false, nil + } if err != nil { log.Printf("error reading room with id %s : %s", roomName, err) - return Room{}, err + return Room{}, false, err } - return readRoom, nil + return readRoom, true, nil } func (redisRM RedisRM) Save(room Room) error { diff --git a/routes/login_page.go b/routes/login_page.go index 7bd1127..dc67c33 100644 --- a/routes/login_page.go +++ b/routes/login_page.go @@ -26,8 +26,8 @@ func registerLoginRoutes( } }) - // submitting the login info : room name & pwd, personal name & pwd - http.HandleFunc("/login/submit", func(w http.ResponseWriter, r *http.Request) { + // when the room exists - attempt to join + http.HandleFunc("/login/join", func(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { w.WriteHeader(http.StatusBadRequest) @@ -38,7 +38,7 @@ func registerLoginRoutes( pn := r.PostFormValue("personalName") pp := r.PostFormValue("personalPassword") - room, err := rooms.Get(rn) + room, _, err := rooms.Get(rn) if err != nil { log.Printf("/login/submit error getting room %s", rn) // return i guess @@ -63,6 +63,30 @@ func registerLoginRoutes( // d) how should i monitor sessions? }) - // checking whether the room name already exists - change button between Join or Create + // when room does not exist + http.HandleFunc("/login/create", func(w http.ResponseWriter, r *http.Request) { + err := r.ParseForm() + if err != nil { + w.WriteHeader(http.StatusBadRequest) + } + fmt.Fprintf(w, "got submitted form %+v", r.PostForm) + }) + + // checking whether the room name already exists + // toggle button between Join or Create + http.HandleFunc("/login/room-name-check", func(w http.ResponseWriter, r *http.Request) { + err := r.ParseForm() + if err != nil { + w.WriteHeader(http.StatusBadRequest) + } + roomName := r.PostFormValue("roomName") + _, isFound, err := rooms.Get(roomName) + if err != nil { + log.Printf("/login/room-name-check error finding room %s\n", err) + } + var templFile = "templates/login.gohtml" + tmpl := template.Must(template.ParseFS(templateFs, templFile)) + err = tmpl.ExecuteTemplate(w, "formButton", isFound) + }) } diff --git a/routes/static/out.css b/routes/static/out.css index 8496e92..50b85fe 100644 --- a/routes/static/out.css +++ b/routes/static/out.css @@ -538,6 +538,10 @@ video { grid-column: 1 / -1; } +.block { + display: block; +} + .flex { display: flex; } diff --git a/routes/templates/login.gohtml b/routes/templates/login.gohtml index 3c7e970..7e48b28 100644 --- a/routes/templates/login.gohtml +++ b/routes/templates/login.gohtml @@ -3,7 +3,7 @@ - Untitled + Untitled!!!