handlers.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. const h = require("./helper");
  2. /**
  3. * @param databaseLayer
  4. * @returns {{singleQuery: function(*), multipleQueries: function(*), fortunes: function(*), updates: function(*)}}
  5. */
  6. module.exports = databaseLayer => ({
  7. singleQuery: async (req, reply) => {
  8. const world = await databaseLayer.getWorld(h.randomTfbNumber());
  9. reply.send(world);
  10. },
  11. multipleQueries: async (req, reply) => {
  12. const queries = h.getQueries(req.query.queries);
  13. const promisesArray = [];
  14. for (let i = 0; i < queries; i++) {
  15. promisesArray.push(databaseLayer.getWorld(h.randomTfbNumber()));
  16. }
  17. const worlds = await Promise.all(promisesArray);
  18. reply.send(worlds);
  19. },
  20. fortunes: async (req, reply) => {
  21. const fortunes = await databaseLayer.allFortunes();
  22. fortunes.push(h.additionalFortune);
  23. fortunes.sort(compare);
  24. return reply.view("/views/fortunes.hbs", { fortunes });
  25. },
  26. updates: async (req, reply) => {
  27. const queries = h.getQueries(req.query.queries);
  28. const worldPromises = [];
  29. for (let i = 0; i < queries; i++) {
  30. worldPromises.push(databaseLayer.getWorld(h.randomTfbNumber()));
  31. }
  32. const worlds = await Promise.all(worldPromises);
  33. const worldsToUpdate = worlds.map(world => {
  34. world.randomNumber = h.randomTfbNumber();
  35. return world;
  36. });
  37. await databaseLayer.saveWorlds(worldsToUpdate);
  38. reply.send(worldsToUpdate);
  39. }
  40. });
  41. // faster than localeCompare
  42. function compare(a, b) {
  43. if(a.message < b.message){
  44. return -1;
  45. } else if (a.message > b.message) {
  46. return 1;
  47. }
  48. return 0;
  49. }