- Created new `api` Django app with serializers, viewsets, and routers to expose draft sessions, participants, and movie data. - Registered `api` app in settings and updated root URL configuration. - Extended WebSocket consumers with `inform.draft_status` / `request.draft_status` to allow fetching current draft state. - Updated `DraftSession` and related models to support reverse lookups for draft picks. - Enhanced draft state manager to include `draft_order` in summaries. - Added React WebSocket context provider, connection status component, and new admin/participant panels with phase and participant tracking. - Updated SCSS for participant lists, phase indicators, and status badges. - Modified Django templates to mount new React roots for admin and participant views. - Updated Webpack dev server config to proxy WebSocket connections.
60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
from enum import IntEnum
|
|
|
|
class DraftMessage:
|
|
# Server
|
|
INFORM_PHASE_CHANGE = "inform.phase.change"
|
|
CONFIRM_PHASE_CHANGE = "confirm.phase.change"
|
|
INFORM_PHASE = "inform.phase"
|
|
INFORM_DRAFT_STATUS = "inform.draft_status"
|
|
|
|
# Client
|
|
REQUEST_PHASE_CHANGE = "request.phase.change"
|
|
REQUEST_DRAFT_STATUS = "request.draft_status"
|
|
|
|
# Waiting Phase
|
|
## Server
|
|
INFORM_JOIN_USER = "inform.join.user"
|
|
REQUEST_JOIN_PARTICIPANT = "request.join.participant"
|
|
REQUEST_JOIN_ADMIN = "request.join.admin"
|
|
INFORM_LEAVE_PARTICIPANT = "inform.leave.participant"
|
|
|
|
## Client
|
|
NOTIFY_JOIN_USER = "notify.join.user"
|
|
CONFIRM_JOIN_PARTICIPANT = "confirm.join.participant"
|
|
REJECT_JOIN_PARTICIPANT = "reject.join.participant"
|
|
CONFIRM_JOIN_ADMIN = "confirm.join.admin"
|
|
|
|
# Determine Order
|
|
## Server
|
|
CONFIRM_DETERMINE_DRAFT_ORDER = "confirm.determine.draft_order"
|
|
## Client
|
|
REQUEST_DETERMINE_DRAFT_ORDER = "request.determine.draft_order"
|
|
|
|
|
|
class DraftPhase(IntEnum):
|
|
WAITING = 0
|
|
DETERMINE_ORDER = 10
|
|
NOMINATION = 20
|
|
BIDDING = 30
|
|
AWARD = 40
|
|
FINALIZE = 50
|
|
|
|
def __str__(self):
|
|
return self.name.lower()
|
|
|
|
class DraftGroupChannelNames:
|
|
def __init__(self, id):
|
|
self.prefix = f"draft.{id}"
|
|
|
|
@property
|
|
def session(self):
|
|
return f"{self.prefix}.session"
|
|
|
|
@property
|
|
def admin(self):
|
|
return f"{self.prefix}.admin"
|
|
|
|
@property
|
|
def participant(self):
|
|
return f"{self.prefix}.participant"
|
|
|