DatabasePresenter.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Presenters;
  4. use Nette;
  5. final class DatabasePresenter extends Nette\Application\UI\Presenter
  6. {
  7. private Nette\Database\Explorer $explorer;
  8. public function __construct(Nette\Database\Explorer $explorer) {
  9. $this->explorer = $explorer;
  10. }
  11. public function renderDb() {
  12. $random_id = mt_rand(1, 10000);
  13. $table = $this->explorer->table('World');
  14. $row = $table->where('id', $random_id)->fetch();
  15. $this->sendJson([
  16. 'id' => $row->id,
  17. 'randomNumber' => $row->randomNumber
  18. ]);
  19. }
  20. public function renderQuery() {
  21. $queries = $this->getHttpRequest()->getQuery('queries');
  22. if (is_numeric($queries)) {
  23. $queries = max(1, min($queries, 500));
  24. } else {
  25. $queries = 1;
  26. }
  27. $worlds = [];
  28. for ($i = 0; $i < $queries; ++$i) {
  29. $random_id = mt_rand(1, 10000);
  30. $table = $this->explorer->table('World');
  31. $row = $table->where('id = ?', $random_id)->fetch();
  32. $world = [
  33. 'id' => $row['id'],
  34. 'randomNumber' => $row['randomNumber']
  35. ];
  36. $worlds[] = $world;
  37. }
  38. $this->sendJson($worlds);
  39. }
  40. public function renderUpdate() {
  41. $queries = $this->getHttpRequest()->getQuery('queries');
  42. if (is_numeric($queries)) {
  43. $queries = max(1, min($queries, 500));
  44. } else {
  45. $queries = 1;
  46. }
  47. $worlds = [];
  48. for ($i = 0; $i < $queries; ++$i) {
  49. $random_id = mt_rand(1, 10000);
  50. $random_update_id = mt_rand(1, 10000);
  51. $update_result = $this->explorer->table('World')->where('id', $random_id);
  52. $update_row = $update_result->fetch();
  53. $update_result->update([
  54. 'randomNumber' => $random_update_id
  55. ]);
  56. $world = [
  57. 'id' => $update_row->id,
  58. 'randomNumber' => $random_update_id
  59. ];
  60. $worlds[] = $world;
  61. }
  62. $this->sendJson($worlds);
  63. }
  64. public function renderFortune() {
  65. $fortunes = $this->explorer->table('Fortune')->fetchAll();
  66. $fortunes = $this->addFortune($fortunes);
  67. $fortunes = $this->sortFortunes($fortunes);
  68. $this->template->fortunes = $fortunes;
  69. }
  70. protected function addFortune($fortunes) {
  71. $fortunes[] = (object) [ 'id' => 0, 'message' => 'Additional fortune added at request time.' ];
  72. return $fortunes;
  73. }
  74. protected function sortFortunes(array $fortunes): array {
  75. usort($fortunes, function ($left, $right) {
  76. return $left->message <=> $right->message;
  77. });
  78. return $fortunes;
  79. }
  80. }