feat: toggling Create/Join room button
This commit is contained in:
parent
bd99eaa54d
commit
201b3760da
|
@ -40,7 +40,7 @@ func (r *Room) UnmarshalBinary(data []byte) error {
|
||||||
var ctx = context.Background()
|
var ctx = context.Background()
|
||||||
|
|
||||||
type RoomManager interface {
|
type RoomManager interface {
|
||||||
Get(roomName string) (Room, error) // but we need Get by name
|
Get(roomName string) (Room, bool, error)
|
||||||
Save(room Room) error
|
Save(room Room) error
|
||||||
}
|
}
|
||||||
const roomRedisPrefix = "room"
|
const roomRedisPrefix = "room"
|
||||||
|
@ -53,15 +53,18 @@ type RedisRM struct {
|
||||||
Rdb *redis.Client
|
Rdb *redis.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func (redisRM RedisRM) Get(roomName string) (Room, error) {
|
func (redisRM RedisRM) Get(roomName string) (Room, bool, error) {
|
||||||
var readRoom Room
|
var readRoom Room
|
||||||
err := redisRM.Rdb.Get(ctx, roomNameToRedisId(roomName)).Scan(&readRoom)
|
err := redisRM.Rdb.Get(ctx, roomNameToRedisId(roomName)).Scan(&readRoom)
|
||||||
|
if err == redis.Nil {
|
||||||
|
return Room{}, false, nil
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("error reading room with id %s : %s", roomName, err)
|
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 {
|
func (redisRM RedisRM) Save(room Room) error {
|
||||||
|
|
|
@ -26,8 +26,8 @@ func registerLoginRoutes(
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// submitting the login info : room name & pwd, personal name & pwd
|
// when the room exists - attempt to join
|
||||||
http.HandleFunc("/login/submit", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/login/join", func(w http.ResponseWriter, r *http.Request) {
|
||||||
err := r.ParseForm()
|
err := r.ParseForm()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
@ -38,7 +38,7 @@ func registerLoginRoutes(
|
||||||
pn := r.PostFormValue("personalName")
|
pn := r.PostFormValue("personalName")
|
||||||
pp := r.PostFormValue("personalPassword")
|
pp := r.PostFormValue("personalPassword")
|
||||||
|
|
||||||
room, err := rooms.Get(rn)
|
room, _, err := rooms.Get(rn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("/login/submit error getting room %s", rn)
|
log.Printf("/login/submit error getting room %s", rn)
|
||||||
// return i guess
|
// return i guess
|
||||||
|
@ -63,6 +63,30 @@ func registerLoginRoutes(
|
||||||
// d) how should i monitor sessions?
|
// 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)
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -538,6 +538,10 @@ video {
|
||||||
grid-column: 1 / -1;
|
grid-column: 1 / -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.block {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
.flex {
|
.flex {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||||
<title>Untitled</title>
|
<title>Untitled!!!</title>
|
||||||
<meta name="description" content="" />
|
<meta name="description" content="" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<script
|
<script
|
||||||
|
@ -43,7 +43,11 @@
|
||||||
type="text"
|
type="text"
|
||||||
name="roomName"
|
name="roomName"
|
||||||
value=""
|
value=""
|
||||||
placeholder="room name"
|
placeholder="room name!!!"
|
||||||
|
hx-trigger="keyup changed delay:500ms"
|
||||||
|
hx-post="/login/room-name-check"
|
||||||
|
hx-target="#formButton"
|
||||||
|
hx-swap="outerHTML"
|
||||||
/>
|
/>
|
||||||
<input
|
<input
|
||||||
id="roomPassword"
|
id="roomPassword"
|
||||||
|
@ -70,9 +74,13 @@
|
||||||
placeholder="personal password"
|
placeholder="personal password"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<button class="col-span-full"
|
{{ block "formButton" .IsRoomExisting }}
|
||||||
hx-post="/login/submit"
|
{{ if not . }}
|
||||||
>Join / Create</button>
|
<button id="formButton" class="col-span-full" hx-post="/login/create">Create Room</button>
|
||||||
|
{{ else }}
|
||||||
|
<button id="formButton" class="col-span-full" hx-post="/login/join">Join Room</button>
|
||||||
|
{{ end }}
|
||||||
|
{{ end }}
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|
Loading…
Reference in New Issue