Update
This commit is contained in:
151
src/state/types.go
Normal file
151
src/state/types.go
Normal file
@@ -0,0 +1,151 @@
|
||||
package state
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
RoleParticipant = "participant"
|
||||
RoleViewer = "viewer"
|
||||
|
||||
RevealModeManual = "manual"
|
||||
RevealModeAutoAll = "all_voted"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrRoomNotFound = errors.New("room not found")
|
||||
ErrParticipantNotFound = errors.New("participant not found")
|
||||
ErrUnauthorized = errors.New("unauthorized")
|
||||
ErrRoomFull = errors.New("room is full")
|
||||
ErrInvalidRole = errors.New("invalid role")
|
||||
ErrSpectatorsBlocked = errors.New("spectators are not allowed")
|
||||
ErrPasswordRequired = errors.New("password required or invalid")
|
||||
ErrInvalidCard = errors.New("invalid card")
|
||||
)
|
||||
|
||||
type RoomSettings struct {
|
||||
RoomName string `json:"roomName"`
|
||||
MaxPeople int `json:"maxPeople"`
|
||||
Cards []string `json:"cards"`
|
||||
AllowSpectators bool `json:"allowSpectators"`
|
||||
AnonymousVoting bool `json:"anonymousVoting"`
|
||||
AutoReset bool `json:"autoReset"`
|
||||
RevealMode string `json:"revealMode"`
|
||||
VotingTimeoutSec int `json:"votingTimeoutSec"`
|
||||
PasswordSalt string `json:"passwordSalt,omitempty"`
|
||||
PasswordHash string `json:"passwordHash,omitempty"`
|
||||
}
|
||||
|
||||
type Participant struct {
|
||||
ID string `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Role string `json:"role"`
|
||||
IsAdmin bool `json:"isAdmin"`
|
||||
Connected bool `json:"connected"`
|
||||
HasVoted bool `json:"hasVoted"`
|
||||
VoteValue string `json:"voteValue,omitempty"`
|
||||
JoinedAt time.Time `json:"joinedAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
|
||||
type RoundState struct {
|
||||
Revealed bool `json:"revealed"`
|
||||
}
|
||||
|
||||
type persistedRoom struct {
|
||||
ID string `json:"id"`
|
||||
AdminToken string `json:"adminToken"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
Settings RoomSettings `json:"settings"`
|
||||
Round RoundState `json:"round"`
|
||||
Participants []*Participant `json:"participants"`
|
||||
}
|
||||
|
||||
type subscriber struct {
|
||||
participantID string
|
||||
ch chan []byte
|
||||
}
|
||||
|
||||
type Room struct {
|
||||
ID string
|
||||
AdminToken string
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
Settings RoomSettings
|
||||
Round RoundState
|
||||
Participants map[string]*Participant
|
||||
|
||||
mu sync.RWMutex
|
||||
subscribers map[string]*subscriber
|
||||
}
|
||||
|
||||
type CreateRoomInput struct {
|
||||
RoomName string
|
||||
CreatorUsername string
|
||||
MaxPeople int
|
||||
Cards []string
|
||||
AllowSpectators bool
|
||||
AnonymousVoting bool
|
||||
AutoReset bool
|
||||
RevealMode string
|
||||
VotingTimeoutSec int
|
||||
Password string
|
||||
}
|
||||
|
||||
type JoinRoomInput struct {
|
||||
ParticipantID string
|
||||
Username string
|
||||
Role string
|
||||
Password string
|
||||
AdminToken string
|
||||
}
|
||||
|
||||
type CreateRoomResult struct {
|
||||
RoomID string `json:"roomId"`
|
||||
CreatorParticipantID string `json:"creatorParticipantId"`
|
||||
AdminToken string `json:"adminToken"`
|
||||
ParticipantLink string `json:"participantLink"`
|
||||
AdminLink string `json:"adminLink"`
|
||||
}
|
||||
|
||||
type JoinRoomResult struct {
|
||||
ParticipantID string `json:"participantId"`
|
||||
IsAdmin bool `json:"isAdmin"`
|
||||
Role string `json:"role"`
|
||||
Username string `json:"username"`
|
||||
}
|
||||
|
||||
type PublicParticipant struct {
|
||||
ID string `json:"id"`
|
||||
Username string `json:"username"`
|
||||
Role string `json:"role"`
|
||||
IsAdmin bool `json:"isAdmin"`
|
||||
Connected bool `json:"connected"`
|
||||
HasVoted bool `json:"hasVoted"`
|
||||
VoteValue string `json:"voteValue,omitempty"`
|
||||
}
|
||||
|
||||
type RoomLinks struct {
|
||||
ParticipantLink string `json:"participantLink"`
|
||||
AdminLink string `json:"adminLink,omitempty"`
|
||||
}
|
||||
|
||||
type PublicRoomState struct {
|
||||
RoomID string `json:"roomId"`
|
||||
RoomName string `json:"roomName"`
|
||||
Cards []string `json:"cards"`
|
||||
Revealed bool `json:"revealed"`
|
||||
RevealMode string `json:"revealMode"`
|
||||
MaxPeople int `json:"maxPeople"`
|
||||
AllowSpectators bool `json:"allowSpectators"`
|
||||
AnonymousVoting bool `json:"anonymousVoting"`
|
||||
AutoReset bool `json:"autoReset"`
|
||||
VotingTimeoutSec int `json:"votingTimeoutSec"`
|
||||
Participants []PublicParticipant `json:"participants"`
|
||||
SelfParticipantID string `json:"selfParticipantId"`
|
||||
ViewerIsAdmin bool `json:"viewerIsAdmin"`
|
||||
Links RoomLinks `json:"links"`
|
||||
}
|
||||
Reference in New Issue
Block a user