views.js 2.2 KB

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