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;hp=23ab0d1f2fe34ae413a3a37dc6c01855148f16b9 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);