Add nomination submission and bidding start workflow
- Added `BID_START_REQUEST` and `NOMINATION_SUBMIT_REQUEST` handling in backend consumers. - Extended draft state to include `current_movie` and `bids` cache keys. - Updated frontend to: - Allow participants to nominate movies when it's their turn. - Enable admins to start bidding for the nominated movie. - Highlight the current nominated movie and the current user. - Synced state updates across clients via WebSocket events.
This commit is contained in:
@@ -182,6 +182,34 @@ class DraftAdminConsumer(DraftConsumerBase):
|
||||
},
|
||||
)
|
||||
|
||||
if event_type == DraftMessage.NOMINATION_SUBMIT_REQUEST:
|
||||
movie_id = content.get('payload',{}).get('movie_id')
|
||||
user = content.get('payload',{}).get('user')
|
||||
self.draft_state.start_nomination(movie_id)
|
||||
await self.channel_layer.group_send(
|
||||
self.group_names.session,
|
||||
{
|
||||
"type": "broadcast.session",
|
||||
"subtype": DraftMessage.NOMINATION_CONFIRM,
|
||||
"payload": {
|
||||
"current_movie": self.draft_state.get_summary()['current_movie'],
|
||||
"nominating_participant": user
|
||||
}
|
||||
}
|
||||
)
|
||||
if event_type == DraftMessage.BID_START_REQUEST:
|
||||
self.draft_state
|
||||
await self.channel_layer.group_send(
|
||||
self.group_names.session,
|
||||
{
|
||||
"type": "broadcast.session",
|
||||
"subtype": DraftMessage.BID_START_INFORM,
|
||||
"payload": {
|
||||
"current_movie": self.draft_state.get_summary()['current_movie']
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
def should_accept_user(self):
|
||||
return super().should_accept_user() and self.user.is_staff
|
||||
|
||||
@@ -276,6 +304,20 @@ class DraftParticipantConsumer(DraftConsumerBase):
|
||||
|
||||
async def receive_json(self, content):
|
||||
await super().receive_json(content)
|
||||
event_type = content.get('type')
|
||||
if event_type == DraftMessage.NOMINATION_SUBMIT_REQUEST:
|
||||
await self.channel_layer.group_send(
|
||||
self.group_names.admin,
|
||||
{
|
||||
"type": "broadcast.admin",
|
||||
"subtype": event_type,
|
||||
"payload": {
|
||||
"movie_id": content.get('payload',{}).get('id'),
|
||||
"user": content.get('payload',{}).get('user')
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
# === Broadcast handlers ===
|
||||
|
||||
|
||||
Reference in New Issue
Block a user