From: Carl Worth Date: Tue, 9 Jun 2020 15:03:58 +0000 (-0700) Subject: empathy: Better separation of concerns between routes and game class X-Git-Url: https://git.cworth.org/git?p=empires-server;a=commitdiff_plain;h=0787b1e92bfb59e3f2c4e8953ca5d898ff04bee3 empathy: Better separation of concerns between routes and game class In this commit we make the route handlers much simpler: Their job is to parse data from the received request and provide a response to the client, (such as an appropriate status code), but otherwise, the meat of the functionality is provided by methods on the Empathy class). This separation should lead to more maintainable code as the implementations on both sides are smaller and more focused on a single job. --- diff --git a/empathy.js b/empathy.js index 6fc926f..7a75b71 100644 --- a/empathy.js +++ b/empathy.js @@ -9,6 +9,32 @@ class Empathy extends Game { }; this.next_prompt_id = 1; } + + add_prompt(items, prompt_string) { + const prompt = new Prompt(this.next_prompt_id, items, prompt_string); + this.next_prompt_id++; + + this.state.prompts.push(prompt); + + this.broadcast_event_object('prompt', prompt); + + return prompt; + } + + /* Returns true if vote toggled, false for player or prompt not found */ + toggle_vote(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(player.name); + + this.broadcast_event_object('prompt', prompt); + + return true; + } } Empathy.router = express.Router(); @@ -33,32 +59,17 @@ class Prompt { router.post('/prompts', (request, response) => { const game = request.game; - const prompt = new Prompt(game.next_prompt_id, - request.body.items, - request.body.prompt); - game.next_prompt_id++; - - game.state.prompts.push(prompt); - - game.broadcast_event_object('prompt', prompt); + game.add_prompt(request.body.items, request.body.prompt); }); router.post('/vote/:prompt_id([0-9]+)', (request, response) => { - const prompt_id = parseInt(request.params.prompt_id, 10); const game = request.game; - const player = game.players_by_session[request.session.id]; + const prompt_id = parseInt(request.params.prompt_id, 10); - prompt = game.state.prompts.find(p => p.id === prompt_id); - if (! prompt || ! player) { + if (game.toggle_vote(prompt_id, request.session.id)) + response.sendStatus(200); + else response.sendStatus(404); - return; - } - - prompt.toggle_vote(player.name); - - game.broadcast_event_object('prompt', prompt); - - response.sendStatus(200); }); Empathy.meta = {