handler.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const h = require('../helper');
  2. const Bluebird = require('bluebird');
  3. /**
  4. * @param databaseLayer
  5. * @returns {{SingleQuery: function(*), MultipleQueries: function(*), Fortunes: function(*), Updates: function(*)}}
  6. */
  7. module.exports = (databaseLayer) => ({
  8. SingleQuery: async (ctx) => {
  9. ctx.body = await databaseLayer.getWorldLean(h.randomTfbNumber());
  10. },
  11. MultipleQueries: async (ctx) => {
  12. const queries = h.getQueries(ctx.request.query.queries);
  13. const promisesArray = [];
  14. for (let i = 0; i < queries; i++) {
  15. promisesArray.push(databaseLayer.getWorldLean(h.randomTfbNumber()));
  16. }
  17. ctx.body = await Bluebird.all(promisesArray)
  18. },
  19. Fortunes: async (ctx) => {
  20. const fortunes = await databaseLayer.allFortunes();
  21. fortunes.push(h.additionalFortune);
  22. fortunes.sort((a, b) => a.message.localeCompare(b.message));
  23. return ctx.render('fortunes', {fortunes});
  24. },
  25. Updates: (ctx) => {
  26. const queries = h.getQueries(ctx.request.query.queries);
  27. const worldPromises = [];
  28. for (let i = 0; i < queries; i++) {
  29. worldPromises.push(databaseLayer.getWorld(h.randomTfbNumber()));
  30. }
  31. return Bluebird
  32. .all(worldPromises)
  33. .map(world => {
  34. world.randomNumber = h.randomTfbNumber();
  35. return world
  36. })
  37. .then(worlds => databaseLayer.saveWorlds(worlds))
  38. .then(worlds => {
  39. ctx.body = worlds;
  40. });
  41. }
  42. });