FortuneResource.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. <?php
  2. namespace Benchmark\Resources;
  3. use Benchmark\Entities\FortuneEntity;
  4. use Benchmark\Entities\Message;
  5. use Hamlet\Database\Session;
  6. use Hamlet\Http\Requests\Request;
  7. use Hamlet\Http\Resources\HttpResource;
  8. use Hamlet\Http\Responses\{Response, SimpleOKResponse};
  9. class FortuneResource extends DbResource
  10. {
  11. public function getResponse(Request $request): Response
  12. {
  13. $messages = $this->database->withSession(
  14. function (Session $session) {
  15. $procedure = $session->prepare('
  16. SELECT id,
  17. message
  18. FROM Fortune
  19. ');
  20. return $procedure->processAll()
  21. ->selectAll()->cast(Message::class)
  22. ->collectAll();
  23. }
  24. );
  25. $messages[] = new Message(0, 'Additional fortune added at request time.');
  26. usort($messages, function (Message $a, Message $b): int {
  27. return $a->message() <=> $b->message();
  28. });
  29. return new SimpleOKResponse(new FortuneEntity($messages));
  30. }
  31. }