Feat: add player interface
This commit is contained in:
@ -50,12 +50,24 @@ type Team struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Action struct {
|
type Action struct {
|
||||||
Actor string
|
ID int `json:"id" db:"id"`
|
||||||
ActorColor string
|
RoomID string `json:"room_id" db:"room_id"`
|
||||||
Action string // clue | guess
|
Actor string `json:"actor" db:"actor"`
|
||||||
Word string
|
ActorColor string `json:"actor_color" db:"actor_color"`
|
||||||
WordColor string
|
Action string `json:"action_type" db:"action_type"`
|
||||||
Number string // for clue
|
Word string `json:"word" db:"word"`
|
||||||
|
WordColor string `json:"word_color" db:"word_color"`
|
||||||
|
Number string `json:"number_associated" db:"number_associated"`
|
||||||
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Player struct {
|
||||||
|
ID int `json:"id" db:"id"`
|
||||||
|
RoomID string `json:"room_id" db:"room_id"`
|
||||||
|
Username string `json:"username" db:"username"`
|
||||||
|
Team UserTeam `json:"team" db:"team"`
|
||||||
|
Role UserRole `json:"role" db:"role"`
|
||||||
|
IsBot bool `json:"is_bot" db:"is_bot"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type BotPlayer struct {
|
type BotPlayer struct {
|
||||||
|
@ -1,11 +1,31 @@
|
|||||||
package repos
|
package repos
|
||||||
|
|
||||||
import "github.com/jackc/pgx/v5/pgxpool"
|
import (
|
||||||
|
"context"
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/jackc/pgx/v5/pgxpool"
|
||||||
|
)
|
||||||
|
|
||||||
type AllRepos interface {
|
type AllRepos interface {
|
||||||
RoomsRepo
|
RoomsRepo
|
||||||
|
ActionsRepo
|
||||||
|
PlayersRepo
|
||||||
}
|
}
|
||||||
|
|
||||||
type RepoProvider struct {
|
type RepoProvider struct {
|
||||||
DB *pgxpool.Pool
|
DB *pgxpool.Pool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewRepoProvider(pathToDB string) *RepoProvider {
|
||||||
|
dbpool, err := pgxpool.New(context.Background(), pathToDB)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("Unable to connect to database", "error", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
slog.Info("Successfully connected to database")
|
||||||
|
return &RepoProvider{
|
||||||
|
DB: dbpool,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
31
repos/players.go
Normal file
31
repos/players.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package repos
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"gralias/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PlayersRepo interface {
|
||||||
|
GetPlayer(roomID, username string) (*models.Player, error)
|
||||||
|
AddPlayer(player *models.Player) error
|
||||||
|
DeletePlayer(roomID, username string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *RepoProvider) GetPlayer(roomID, username string) (*models.Player, error) {
|
||||||
|
var player models.Player
|
||||||
|
err := p.DB.QueryRow(context.Background(), "SELECT id, room_id, username, team, role, is_bot FROM players WHERE room_id = $1 AND username = $2", roomID, username).Scan(&player.ID, &player.RoomID, &player.Username, &player.Team, &player.Role, &player.IsBot)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &player, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *RepoProvider) AddPlayer(player *models.Player) error {
|
||||||
|
_, err := p.DB.Exec(context.Background(), "INSERT INTO players (room_id, username, team, role, is_bot) VALUES ($1, $2, $3, $4, $5)", player.RoomID, player.Username, player.Team, player.Role, player.IsBot)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *RepoProvider) DeletePlayer(roomID, username string) error {
|
||||||
|
_, err := p.DB.Exec(context.Background(), "DELETE FROM players WHERE room_id = $1 AND username = $2", roomID, username)
|
||||||
|
return err
|
||||||
|
}
|
Reference in New Issue
Block a user