Application.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace Benchmark;
  3. use Benchmark\Resources\DbResource;
  4. use Benchmark\Resources\FortuneResource;
  5. use Benchmark\Resources\HelloJsonResource;
  6. use Benchmark\Resources\HelloTextResource;
  7. use Benchmark\Resources\QueriesResource;
  8. use Benchmark\Resources\UpdateResource;
  9. use Cache\Adapter\PHPArray\ArrayCachePool;
  10. use Hamlet\Database\Database;
  11. use Hamlet\Http\Applications\AbstractApplication;
  12. use Hamlet\Http\Requests\Request;
  13. use Hamlet\Http\Resources\HttpResource;
  14. use Hamlet\Http\Resources\NotFoundResource;
  15. use Hamlet\Http\Responses\Response;
  16. use Hamlet\Http\Responses\ServerErrorResponse;
  17. use Psr\Cache\CacheItemPoolInterface;
  18. use Throwable;
  19. class Application extends AbstractApplication
  20. {
  21. /** @var CacheItemPoolInterface|null */
  22. private $cache;
  23. /** @var HttpResource */
  24. private $helloTextResource;
  25. /** @var HttpResource */
  26. private $helloJsonResource;
  27. /** @var HttpResource */
  28. private $dbResource;
  29. /** @var HttpResource */
  30. private $queriesResource;
  31. /** @var HttpResource */
  32. private $fortuneResource;
  33. /** @var HttpResource */
  34. private $updateResource;
  35. public function __construct(Database $database)
  36. {
  37. $this->helloJsonResource = new HelloJsonResource();
  38. $this->helloTextResource = new HelloTextResource();
  39. $this->dbResource = new DbResource($database);
  40. $this->queriesResource = new QueriesResource($database);
  41. $this->fortuneResource = new FortuneResource($database);
  42. $this->updateResource = new UpdateResource($database);
  43. }
  44. public function run(Request $request): Response
  45. {
  46. try {
  47. return parent::run($request);
  48. } catch (Throwable $e) {
  49. return new ServerErrorResponse();
  50. }
  51. }
  52. public function findResource(Request $request): HttpResource
  53. {
  54. switch ($request->getPath()) {
  55. case '/plaintext':
  56. return $this->helloTextResource;
  57. case '/json':
  58. return $this->helloJsonResource;
  59. case '/db':
  60. return $this->dbResource;
  61. case '/queries':
  62. return $this->queriesResource;
  63. case '/fortunes':
  64. return $this->fortuneResource;
  65. case '/update':
  66. return $this->updateResource;
  67. }
  68. return new NotFoundResource();
  69. }
  70. protected function getCache(Request $request): CacheItemPoolInterface
  71. {
  72. if (!$this->cache) {
  73. $this->cache = new ArrayCachePool();
  74. }
  75. return $this->cache;
  76. }
  77. }