feat: room manager and pushed to login page route

This commit is contained in:
efim
2023-10-29 15:18:27 +00:00
parent 1c62f80064
commit bd99eaa54d
5 changed files with 51 additions and 51 deletions

View File

@@ -3,6 +3,7 @@ package rooms
import (
"context"
"encoding/json"
"fmt"
"log"
"github.com/redis/go-redis/v9"
@@ -15,9 +16,8 @@ type Person struct {
}
type Room struct {
RoomId int64
Name string // will be unique ID
AdminIds []int64
Name string
PasswordHash string
Paricipants []Person
// TODO hands, for each type of hand?
@@ -39,45 +39,32 @@ 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
Save(room Room) error
}
const roomRedisPrefix = "room"
func roomNameToRedisId(roomName string) string {
return fmt.Sprintf("%s:%s", roomRedisPrefix, roomName)
}
type RedisRM struct {
Rdb *redis.Client
}
func (redisRM RedisRM) Test() {
testRoom := Room{
RoomId: 1234,
AdminIds: []int64{1111, 2222},
Name: "test room",
PasswordHash: "abcde",
Paricipants: []Person{
{PersonId: 1111,
Name: "admin1",
PasswordHash: "abcde1",
},
{
PersonId: 2222,
Name: "admin2",
PasswordHash: "abcdeee",
},
{
PersonId: 3333,
Name: "nonadmin yay",
PasswordHash: "abcdee123",
},
},
}
err := redisRM.Rdb.Set(ctx, "room:my-room-1", &testRoom, 0).Err()
func (redisRM RedisRM) Get(roomName string) (Room, error) {
var readRoom Room
err := redisRM.Rdb.Get(ctx, roomNameToRedisId(roomName)).Scan(&readRoom)
if err != nil {
log.Printf("error writing room: %s", err)
} else {
log.Printf("successfully written room %d", testRoom.RoomId)
log.Printf("error reading room with id %s : %s", roomName, err)
return Room{}, err
}
var readRoom Room
err = redisRM.Rdb.Get(ctx, "room:my-room-1").Scan(&readRoom)
if err != nil {
log.Printf("error reading room %s", err)
} else {
log.Printf("successfully read room %+v", readRoom)
}
return readRoom, nil
}
func (redisRM RedisRM) Save(room Room) error {
err := redisRM.Rdb.Set(ctx, roomNameToRedisId(room.Name), room, 0).Err() // maybe even set expiration?
return err
}