annoy.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const moment = require('moment');
  2. const { makeUserCrud } = require('server/modules/users');
  3. const {
  4. getAllSlackUsersWithNames,
  5. annoySlackUsers
  6. } = require('server/modules/slack');
  7. const {
  8. getAllUsersOnHoliday
  9. } = require('server/modules/whosoff');
  10. const {
  11. getUsersWithMissingTimesheets
  12. } = require('server/modules/synergist');
  13. function getPreviousWeekPeriod(now) {
  14. const start = now.clone()
  15. .startOf('isoWeek')
  16. .subtract(1, 'weeks');
  17. const end = now.clone()
  18. .startOf('isoWeek')
  19. .subtract(1, 'days')
  20. .endOf('day');
  21. return { start, end };
  22. }
  23. function annoyUsers(config, db, logger) {
  24. const crud = makeUserCrud();
  25. return async (req, res) => {
  26. const now = moment();
  27. const range = getPreviousWeekPeriod(now);
  28. const validUsers = await crud.getDocs(db);
  29. const validUserEmails = validUsers.map(({ email }) => email.toLowerCase());
  30. const [slackUsers, usersOnHoliday] = await Promise.all([
  31. getAllSlackUsersWithNames(config, logger),
  32. getAllUsersOnHoliday(config, logger, now)
  33. ]);
  34. const users = slackUsers.filter(({ email }) =>
  35. validUserEmails.includes(email) &&
  36. !usersOnHoliday.includes(email)
  37. );
  38. const usersMissingTimesheet = await getUsersWithMissingTimesheets(config, logger, range, users);
  39. await annoySlackUsers(config, logger, now, usersMissingTimesheet);
  40. res.json({ ok: true });
  41. };
  42. }
  43. module.exports = {
  44. getPreviousWeekPeriod,
  45. annoyUsers
  46. };