From: Carl Worth Date: Sun, 28 Jun 2020 21:53:43 +0000 (-0700) Subject: Add support for negative votes for categories X-Git-Url: https://git.cworth.org/git?p=empires-server;a=commitdiff_plain;h=678fbabe0f69470625606f59b84e87ae1d60c110 Add support for negative votes for categories Just like the positive votes, the endpoint allows toggling and the storage maintains that each player can only vote for (or against) once. --- diff --git a/empathy.js b/empathy.js index ba25cc4..7710892 100644 --- a/empathy.js +++ b/empathy.js @@ -148,6 +148,20 @@ class Empathy extends Game { return true; } + toggle_vote_against(prompt_id, session_id) { + const player = this.players_by_session[session_id]; + + const prompt = this.state.prompts.find(p => p.id === prompt_id); + if (! prompt || ! player) + return false; + + prompt.toggle_vote_against(player.name); + + this.broadcast_event_object('prompt', prompt); + + return true; + } + /* Returns true on success, false for prompt not found. */ start(prompt_id) { const prompt = this.state.prompts.find(p => p.id === prompt_id); @@ -572,6 +586,7 @@ class Prompt { this.items = items; this.prompt = prompt; this.votes = []; + this.votes_against = []; } toggle_vote(player_name) { @@ -580,6 +595,13 @@ class Prompt { else this.votes.push(player_name); } + + toggle_vote_against(player_name) { + if (this.votes_against.find(v => v === player_name)) + this.votes_against = this.votes_against.filter(v => v !== player_name); + else + this.votes_against.push(player_name); + } } router.post('/prompts', (request, response) => { @@ -600,6 +622,16 @@ router.post('/vote/:prompt_id([0-9]+)', (request, response) => { response.sendStatus(404); }); +router.post('/vote_against/:prompt_id([0-9]+)', (request, response) => { + const game = request.game; + const prompt_id = parseInt(request.params.prompt_id, 10); + + if (game.toggle_vote_against(prompt_id, request.session.id)) + response.send(''); + else + response.sendStatus(404); +}); + router.post('/start/:prompt_id([0-9]+)', (request, response) => { const game = request.game; const prompt_id = parseInt(request.params.prompt_id, 10);