feat: room manager and pushed to login page route
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user