SequelizeMySQLController.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. /**
  2. * SequelizeMySQLController
  3. *
  4. * @description :: Server-side logic for managing Database Queries
  5. */
  6. var h = require('../services/helper')
  7. var Promise = require('bluebird')
  8. var Sequelize = require('sequelize')
  9. var sequelize = new Sequelize(
  10. 'hello_world', 'benchmarkdbuser', 'benchmarkdbpass',
  11. {
  12. host: '127.0.0.1',
  13. dialect: 'mysql',
  14. pool: {
  15. max: 5000,
  16. min: 0,
  17. idle: 5000
  18. },
  19. // hide the SQL queries being run
  20. logging: false
  21. })
  22. var Worlds = sequelize.define('World', {
  23. id: Sequelize.INTEGER,
  24. randomNumber: Sequelize.INTEGER
  25. },
  26. {
  27. // prevents sequelize from assuming the table is called 'Worlds'
  28. freezeTableName: true,
  29. timestamps: false
  30. })
  31. var Fortunes = sequelize.define('Fortune', {
  32. id: Sequelize.INTEGER,
  33. message: Sequelize.STRING
  34. },
  35. {
  36. // prevents sequelize from assuming the table is called 'Fortunes'
  37. freezeTableName: true,
  38. timestamps: false
  39. })
  40. var randomWorldPromise = function() {
  41. var promise = Worlds
  42. .findOne({
  43. where: { id: h.randomTfbNumber() }
  44. })
  45. .then(function (world) {
  46. return world
  47. })
  48. .catch(function (err) {
  49. process.exit(1)
  50. })
  51. return promise
  52. }
  53. var updateWorld = function(world) {
  54. var promise = Worlds
  55. .update(
  56. { randomNumber: world.randomNumber },
  57. { where: { id: world.id } }
  58. )
  59. .then(function (results) {
  60. return world
  61. })
  62. .catch(function (err) {
  63. process.exit(1)
  64. })
  65. return promise
  66. }
  67. module.exports = {
  68. /**
  69. * Test 2: Single Database Query
  70. */
  71. Single: function(req, res) {
  72. randomWorldPromise()
  73. .then(function (world) {
  74. res.json(world)
  75. })
  76. },
  77. /**
  78. * Test 3: Multiple Database Query
  79. */
  80. Multiple: function(req, res) {
  81. var queries = h.getQueries(req)
  82. var toRun = []
  83. for (var i = 0; i < queries; i++) {
  84. toRun.push(randomWorldPromise());
  85. }
  86. Promise
  87. .all(toRun)
  88. .then(function (worlds) {
  89. res.json(worlds)
  90. })
  91. },
  92. /**
  93. * Test 4: Fortunes
  94. */
  95. Fortunes: function(req, res) {
  96. Fortunes
  97. .findAll()
  98. .then(function (fortunes) {
  99. fortunes.push(h.ADDITIONAL_FORTUNE)
  100. fortunes.sort(function (a, b) {
  101. return a.message.localeCompare(b.message)
  102. })
  103. res.render('fortunes', { 'fortunes': fortunes })
  104. })
  105. .catch(function (err) {
  106. process.exit(1)
  107. })
  108. },
  109. /**
  110. * Test 5: Database Updates
  111. */
  112. Updates: function(req, res) {
  113. var queries = h.getQueries(req);
  114. var worldPromises = [];
  115. for (var i = 0; i < queries; i++) {
  116. worldPromises.push(randomWorldPromise())
  117. }
  118. Promise
  119. .all(worldPromises)
  120. .map(function (world) {
  121. return updateWorld(world)
  122. })
  123. .then(function (updated) {
  124. res.json(updated)
  125. })
  126. .catch(function (err) {
  127. process.exit(1)
  128. })
  129. }
  130. };