Controller.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\Fortune;
  4. use App\Models\World;
  5. use Illuminate\Routing\Controller as BaseController;
  6. class Controller extends BaseController {
  7. public function json() {
  8. return [
  9. 'message' => 'Hello, World!'
  10. ];
  11. }
  12. public function db() {
  13. return World::where('id', \mt_rand(1, 10000))->first(); // to compare with find()
  14. }
  15. public function queries($queries = 1) {
  16. $rows = [];
  17. $numbers = $this->getUniqueRandomNumbers($this->clamp($queries));
  18. foreach ($numbers as $id) {
  19. $rows[] = World::find($id);
  20. }
  21. return $rows;
  22. }
  23. public function fortunes() {
  24. $rows = Fortune::all();
  25. $insert = new Fortune();
  26. $insert->id = 0;
  27. $insert->message = 'Additional fortune added at request time.';
  28. $rows->add($insert);
  29. $rows = $rows->sortBy('message');
  30. return view('fortunes', [
  31. 'rows' => $rows
  32. ]);
  33. }
  34. public function updates($queries = 1) {
  35. $rows = [];
  36. $numbers = $this->getUniqueRandomNumbers($this->clamp($queries));
  37. foreach ($numbers as $id) {
  38. $row = World::find($id);
  39. $oldId = $row->randomNumber;
  40. do {
  41. $newId = mt_rand(1, 10000);
  42. } while ($oldId === $newId);
  43. $row->randomNumber = $newId;
  44. do {
  45. try {
  46. $saved = $row->save();
  47. } catch (\Exception $e) {
  48. $saved = false;
  49. }
  50. } while (! $saved);
  51. $rows[] = $row;
  52. }
  53. return $rows;
  54. }
  55. public function plaintext() {
  56. return response('Hello, World!')->header('Content-Type', 'text/plain');
  57. }
  58. private function clamp($value): int {
  59. if (! \is_numeric($value) || $value < 1) {
  60. return 1;
  61. } else if ($value > 500) {
  62. return 500;
  63. } else {
  64. return $value;
  65. }
  66. }
  67. private function getUniqueRandomNumbers($count) {
  68. $res = [];
  69. do {
  70. $res[\mt_rand(1, 10000)] = 1;
  71. } while (\count($res) < $count);
  72. \ksort($res);
  73. return \array_keys($res);
  74. }
  75. }