Browse Source

Merged in feature/dynamic-phrases (pull request #6)

Feature/dynamic phrases

Approved-by: Ryan French <ryan.french@mubaloo.com>
Approved-by: Alex Smith <alex.smith@mubaloo.com>
Fela Maslen 7 years ago
parent
commit
6368f86d46

+ 16 - 0
src/server/modules/phrases.js

@@ -0,0 +1,16 @@
+const joi = require('joi');
+
+const { makeMongoCrud } = require('server/modules/crud');
+
+const COLLECTION_PHRASES = 'phrases';
+
+const SCHEMA_PHRASES = {
+    phrase: joi.string()
+};
+
+const makePhraseCrud = () => makeMongoCrud(COLLECTION_PHRASES, SCHEMA_PHRASES);
+
+module.exports = {
+    makePhraseCrud
+};
+

+ 12 - 5
src/server/modules/slack.js

@@ -4,7 +4,7 @@ const { sprintf } = require('sprintf-js');
 
 const EMAIL_REGEX = /^(.*)@(.*)$/;
 
-function generateAnnoyMessage(config, now, usersList) {
+function generateAnnoyMessage(config, now, usersList, phrases) {
     if (!usersList.length) {
         const isMonday = now.weekday() === 1;
         if (isMonday) {
@@ -14,13 +14,19 @@ function generateAnnoyMessage(config, now, usersList) {
         return null;
     }
 
-    return sprintf(config.annoyMessage, usersList.join(', '));
+    let phrase = config.annoyMessage;
+
+    if (phrases.length) {
+        phrase = phrases[Math.floor(Math.random() * phrases.length)].phrase;
+    }
+
+    return sprintf(phrase, usersList.join(', '));
 }
 
-function annoySlackUsers(config, logger, now, users) {
-    const usersList = users.map(({ id }) => `<@${id}>`);
+function annoySlackUsers(config, logger, now, users, phrases) {
+    const usersList = ['foo', 'bar']; // users.map(({ id }) => `<@${id}>`);
 
-    const message = generateAnnoyMessage(config, now, usersList);
+    const message = generateAnnoyMessage(config, now, usersList, phrases);
 
     if (!message) {
         logger.debug('[SLACK] Not annoying users');
@@ -29,6 +35,7 @@ function annoySlackUsers(config, logger, now, users) {
     }
 
     logger.debug('[SLACK] Annoying users...');
+
     const t0 = Date.now();
 
     const webhook = new IncomingWebhook(config.slack.webhookUrl);

+ 6 - 3
src/server/routes/annoy.js

@@ -1,6 +1,7 @@
 const moment = require('moment');
 
 const { makeUserCrud } = require('server/modules/users');
+const { makePhraseCrud } = require('server/modules/phrases');
 
 const {
     getAllSlackUsersWithNames,
@@ -29,14 +30,16 @@ function getPreviousWeekPeriod(now) {
 }
 
 function annoyUsers(config, db, logger) {
-    const crud = makeUserCrud();
+    const userCrud = makeUserCrud();
+    const phraseCrud = makePhraseCrud();
 
     return async (req, res) => {
         const now = moment();
 
         const range = getPreviousWeekPeriod(now);
 
-        const validUsers = await crud.getDocs(db);
+        const validUsers = await userCrud.getDocs(db);
+        const phrases = await phraseCrud.getDocs(db);
 
         const validUserEmails = validUsers.map(({ email }) => email.toLowerCase());
 
@@ -52,7 +55,7 @@ function annoyUsers(config, db, logger) {
 
         const usersMissingTimesheet = await getUsersWithMissingTimesheets(config, logger, range, users);
 
-        await annoySlackUsers(config, logger, now, usersMissingTimesheet);
+        await annoySlackUsers(config, logger, now, usersMissingTimesheet, phrases);
 
         res.json({ ok: true });
     };

+ 3 - 0
src/server/routes/index.js

@@ -3,6 +3,7 @@ const { Router } = require('express');
 const { makeCrudRoutes } = require('server/modules/crud');
 
 const { makeUserCrud } = require('server/modules/users');
+const { makePhraseCrud } = require('server/modules/phrases');
 
 const { annoyUsers } = require('server/routes/annoy');
 
@@ -15,6 +16,8 @@ function apiRoutes(config, db, logger) {
 
     makeCrudRoutes(config, db, 'employees', router, makeUserCrud());
 
+    makeCrudRoutes(config, db, 'phrases', router, makePhraseCrud());
+
     router.post('/annoy', annoyUsers(config, db, logger));
 
     // eslint-disable-next-line no-unused-vars