DbResource.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace Benchmark\Resources;
  3. use Benchmark\Entities\RandomNumber;
  4. use Hamlet\Database\Database;
  5. use Hamlet\Database\Procedure;
  6. use Hamlet\Http\Entities\JsonEntity;
  7. use Hamlet\Http\Requests\Request;
  8. use Hamlet\Http\Resources\HttpResource;
  9. use Hamlet\Http\Responses\Response;
  10. use Hamlet\Http\Responses\SimpleOKResponse;
  11. use function Hamlet\Cast\_int;
  12. class DbResource implements HttpResource
  13. {
  14. /** @var Database */
  15. protected $database;
  16. /** @var Procedure */
  17. private $procedure;
  18. public function __construct(Database $database)
  19. {
  20. $this->database = $database;
  21. $query = '
  22. SELECT id,
  23. randomNumber
  24. FROM World
  25. WHERE id = ?
  26. ';
  27. $this->procedure = $this->database->prepare($query);
  28. }
  29. public function getResponse(Request $request): Response
  30. {
  31. $id = mt_rand(1, 10000);
  32. $this->procedure->bindInteger($id);
  33. $record = $this->procedure->processOne()
  34. ->selectAll()->cast(RandomNumber::class)
  35. ->collectHead();
  36. return new SimpleOKResponse(new JsonEntity($record));
  37. }
  38. protected function getQueriesCount(Request $request): int
  39. {
  40. if ($request->hasQueryParam('queries')) {
  41. $count = $request->getQueryParam('queries', _int());
  42. if ($count < 1) {
  43. return 1;
  44. } elseif (500 < $count) {
  45. return 500;
  46. } else {
  47. return $count;
  48. }
  49. } else {
  50. return 1;
  51. }
  52. }
  53. }