UpdateResource.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace Benchmark\Resources;
  3. use Benchmark\Entities\RandomNumber;
  4. use Hamlet\Database\Session;
  5. use Hamlet\Http\Entities\JsonEntity;
  6. use Hamlet\Http\Requests\Request;
  7. use Hamlet\Http\Resources\HttpResource;
  8. use Hamlet\Http\Responses\{Response, SimpleOKResponse};
  9. class UpdateResource extends DbResource
  10. {
  11. use QueriesCountTrait;
  12. public function getResponse(Request $request): Response
  13. {
  14. $count = $this->getQueriesCount($request);
  15. $callables = [];
  16. while ($count--) {
  17. $callables[] = function (Session $session) {
  18. $id = mt_rand(1, 10000);
  19. $randomNumber = mt_rand(1, 10000);
  20. $selectProcedure = $session->prepare('
  21. SELECT id,
  22. randomNumber
  23. FROM World
  24. WHERE id = ?
  25. ');
  26. $selectProcedure->bindInteger($id);
  27. /** @var RandomNumber $entry */
  28. $entry = $selectProcedure->processOne()
  29. ->selectAll()->cast(RandomNumber::class)
  30. ->collectHead();
  31. $modifiedEntry = $entry->withNumber($randomNumber);
  32. $updateProcedure = $session->prepare('
  33. UPDATE World
  34. SET randomNumber = ?
  35. WHERE id = ?
  36. ');
  37. $updateProcedure->bindInteger($modifiedEntry->number());
  38. $updateProcedure->bindInteger($modifiedEntry->id());
  39. $updateProcedure->execute();
  40. return $modifiedEntry;
  41. };
  42. }
  43. $payload = $this->database->withSessions($callables);
  44. return new SimpleOKResponse(new JsonEntity($payload));
  45. }
  46. }