- Added 'react-bootstrap' to frontend dependencies for improved UI components.
- Updated bid placement mechanics: backend now stores bids as a list of {user, amount}; frontend displays live bid leaderboard, including highest bid.
- Implemented bid placement form and UI in participant draft screen.
- Used React-Bootstrap Collapse for nominee menu accordion behavior.
- Expanded DraftStateManager and websocket consumers to broadcast bid updates in the new format.
- Added missing 'bids' syncing to all relevant state handling code.
- Improved styling for bidding, panel headers, and pick lists in SCSS; leveraged Bootstrap variables/utilities more extensively.
- Other minor JS, Python, and style tweaks for better stability and robustness.
70 lines
2.9 KiB
Python
70 lines
2.9 KiB
Python
from enum import IntEnum, StrEnum
|
|
|
|
class DraftMessage(StrEnum):
|
|
# Participant
|
|
PARTICIPANT_JOIN_REQUEST = "participant.join.request" # client -> server
|
|
PARTICIPANT_JOIN_CONFIRM = "participant.join.confirm" # server -> client
|
|
PARTICIPANT_JOIN_REJECT = "participant.join.reject" # server -> client
|
|
PARTICIPANT_LEAVE_INFORM = "participant.leave.inform" # server -> client (broadcast)
|
|
|
|
# User presence
|
|
USER_JOIN_INFORM = "user.join.inform" # server -> client
|
|
USER_LEAVE_INFORM = "user.leave.inform"
|
|
USER_IDENTIFICATION_INFORM = "user.identification.inform" # server -> client (tells socket "you are X", e.g. after connect) # server -> client
|
|
|
|
# Phase control
|
|
PHASE_CHANGE_INFORM = "phase.change.inform" # server -> client (target phase payload)
|
|
PHASE_CHANGE_REQUEST = "phase.change.request" # server -> client (target phase payload)
|
|
PHASE_CHANGE_CONFIRM = "phase.change.confirm" # server -> client (target phase payload)
|
|
|
|
# Status / sync
|
|
STATUS_SYNC_REQUEST = "status.sync.request" # client -> server
|
|
STATUS_SYNC_INFORM = "status.sync.inform" # server -> client (full/partial state)
|
|
|
|
DRAFT_INDEX_ADVANCE_REQUEST = "draft.index.advance.request"
|
|
DRAFT_INDEX_ADVANCE_CONFIRM = "draft.index.advance.confirm"
|
|
|
|
# Order determination
|
|
ORDER_DETERMINE_REQUEST = "order.determine.request" # client -> server (admin)
|
|
ORDER_DETERMINE_CONFIRM = "order.determine.confirm" # server -> client
|
|
|
|
# Bidding (examples, adjust to your flow)
|
|
BID_START_INFORM = "bid.start.inform" # server -> client (movie, ends_at)
|
|
BID_START_REQUEST = "bid.start.request" # server -> client (movie, ends_at)
|
|
BID_PLACE_REQUEST = "bid.place.request" # client -> server (amount)
|
|
BID_PLACE_CONFIRM = "bid.update.confirm" # server -> client (high bid)
|
|
BID_UPDATE_INFORM = "bid.update.inform" # server -> client (high bid)
|
|
BID_END_INFORM = "bid.end.inform" # server -> client (winner)
|
|
|
|
# Nomination (examples)
|
|
NOMINATION_SUBMIT_REQUEST = "nomination.submit.request" # client -> server (movie_id)
|
|
NOMINATION_CONFIRM = "nomination.submit.confirm" # server -> client
|
|
|
|
|
|
class DraftPhase(IntEnum):
|
|
WAITING = 10
|
|
DETERMINE_ORDER = 20
|
|
NOMINATING = 30
|
|
BIDDING = 40
|
|
AWARDING = 50
|
|
FINALIZING = 60
|
|
|
|
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"
|
|
|