]> git.cworth.org Git - empires-server/blob - empathy.js
Empathy: Make a vote for a prompt toggle the vote
[empires-server] / empathy.js
1 const express = require("express");
2 const Game = require("./game.js");
3
4 class Empathy extends Game {
5   constructor(id) {
6     super(id);
7     this.state = {
8       prompts: []
9     };
10     this.next_prompt_id = 1;
11   }
12 }
13
14 Empathy.router = express.Router();
15 const router = Empathy.router;
16
17 class Prompt {
18   constructor(id, items, prompt) {
19     this.id = id;
20     this.items = items;
21     this.prompt = prompt;
22     this.votes = [];
23   }
24
25   toggle_vote(player_name) {
26     if (this.votes.find(v => v === player_name))
27       this.votes = this.votes.filter(v => v !== player_name);
28     else
29       this.votes.push(player_name);
30   }
31 }
32
33 router.post('/prompts', (request, response) => {
34   const game = request.game;
35
36   const prompt = new Prompt(game.next_prompt_id,
37                             request.body.items,
38                             request.body.prompt);
39   game.next_prompt_id++;
40
41   game.state.prompts.push(prompt);
42
43   game.broadcast_event_object('prompt', prompt);
44 });
45
46 router.post('/vote/:prompt_id([0-9]+)', (request, response) => {
47   const prompt_id = parseInt(request.params.prompt_id, 10);
48   const game = request.game;
49   const player = game.players_by_session[request.session.id];
50
51   prompt = game.state.prompts.find(p => p.id === prompt_id);
52   if (! prompt || ! player) {
53     response.sendStatus(404);
54     return;
55   }
56
57   prompt.toggle_vote(player.name);
58
59   game.broadcast_event_object('prompt', prompt);
60
61   response.sendStatus(200);
62 });
63
64 Empathy.meta = {
65   name: "Empathy",
66   identifier: "empathy",
67 };
68
69 exports.Game = Empathy;