FortuneResource.php 1.1 KB

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