Application.php 2.1 KB

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