handler.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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.getWorldLean(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.getWorldLean(h.randomTfbNumber()));
  16. }
  17. reply.send(await Promise.all(promisesArray));
  18. },
  19. Fortunes: async (req, reply) => {
  20. const fortunes = await databaseLayer.allFortunes();
  21. fortunes.push(h.additionalFortune);
  22. fortunes.sort((a, b) => a.message.localeCompare(b.message));
  23. reply.view('fortunes.hbs', { fortunes })
  24. },
  25. Updates: async (req, reply) => {
  26. const queries = h.getQueries(req.query.queries);
  27. const worldPromises = [];
  28. for (let i = 0; i < queries; i++) {
  29. worldPromises.push(databaseLayer.getWorld(h.randomTfbNumber()));
  30. }
  31. const worlds = await Promise.all(worldPromises);
  32. const worldsToUpdate = worlds.map(world => {
  33. world.randomNumber = h.randomTfbNumber();
  34. return world
  35. });
  36. const updatedWorlds = await databaseLayer.saveWorlds(worldsToUpdate);
  37. reply.send(updatedWorlds);
  38. }
  39. });