Application.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace Benchmark;
  3. use Benchmark\Resources\{CachedQueriesResource, DbResource, FortuneResource, HelloJsonResource, HelloTextResource, QueriesResource, UpdateResource};
  4. use Cache\Adapter\Apcu\ApcuCachePool;
  5. use Hamlet\Database\Database;
  6. use Hamlet\Http\Applications\AbstractApplication;
  7. use Hamlet\Http\Requests\Request;
  8. use Hamlet\Http\Resources\{HttpResource, NotFoundResource};
  9. use Psr\Cache\CacheItemPoolInterface;
  10. class Application extends AbstractApplication
  11. {
  12. public function __construct(private Database $database, private CacheItemPoolInterface|null $cache = null) {}
  13. public function findResource(Request $request): HttpResource
  14. {
  15. switch ($request->getPath()) {
  16. case '/plaintext':
  17. return new HelloTextResource;
  18. case '/json':
  19. return new HelloJsonResource;
  20. case '/db':
  21. return new DbResource($this->database);
  22. case '/queries':
  23. return new QueriesResource($this->database);
  24. case '/cached-worlds':
  25. return new CachedQueriesResource($this->getCache($request), $this->database);
  26. case '/fortunes':
  27. return new FortuneResource($this->database);
  28. case '/update':
  29. return new UpdateResource($this->database);
  30. }
  31. return new NotFoundResource;
  32. }
  33. protected function getCache(Request $request): CacheItemPoolInterface
  34. {
  35. if (!$this->cache) {
  36. $this->cache = new ApcuCachePool;
  37. }
  38. return $this->cache;
  39. }
  40. }