views.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. const {Application} = require("stick");
  2. const fs = require('fs');
  3. const response = require('ringo/jsgi/response');
  4. const models = require('./models');
  5. const { Template } = require('reinhardt/template');
  6. const fortuneTemplate = module.singleton('fortuneTemplate', function() {
  7. return new Template(fs.read(module.resolve('../templates/fortunes.reinhardt')));
  8. });
  9. const app = exports.app = Application();
  10. const formatQueries = function(queries) {
  11. queries = parseInt(queries, 10) || 1;
  12. if (isNaN(queries) || queries < 1) {
  13. queries = 1;
  14. } else if (queries > 500) {
  15. queries = 500;
  16. }
  17. return queries;
  18. };
  19. app.configure("params", "route");
  20. app.get('/json', function() {
  21. const helloObject = {message: "Hello, World!"};
  22. return response.json(helloObject);
  23. });
  24. app.get('/db/:queries?', function(request, queries) {
  25. queries = formatQueries(queries);
  26. let worlds = [];
  27. for (let i = 0; i < queries; i++) {
  28. let randId = ((Math.random() * 10000) | 0) + 1;
  29. let world = models.store.query('select * from World where id = :id', {id: randId})[0];
  30. worlds.push({"id": world.id, "randomNumber" : world.randomNumber});
  31. }
  32. if (queries == 1) {
  33. worlds = worlds[0];
  34. }
  35. return response.json(worlds);
  36. });
  37. app.get('/fortune', function() {
  38. const fortunes = models.store.query('select Fortune.* from Fortune');
  39. fortunes.push({
  40. id: 0,
  41. message: 'Additional fortune added at request time.'
  42. });
  43. fortunes.sort(models.Fortune.sort);
  44. return response.html(fortuneTemplate.render({fortunes: fortunes}));
  45. });
  46. app.get('/plaintext', function() {
  47. return response.text('Hello, World!');
  48. });
  49. app.get('/updates/:queries?', function(request, queries) {
  50. queries = formatQueries(queries);
  51. const worlds = [];
  52. for (let i = 0; i < queries; i++) {
  53. let randId = ((Math.random() * 10000) | 0) + 1;
  54. let world = models.store.query('select * from World where id = :id', {id: randId})[0];
  55. world.randomNumber = ((Math.random() * 10000) | 0) + 1;
  56. try {
  57. world.save();
  58. } catch (e) {
  59. return response.error('SQL error');
  60. }
  61. worlds.push({"id": world.id, "randomNumber": world.randomNumber});
  62. }
  63. return response.json(worlds);
  64. });