Skip to content

Commit 6e2bff9

Browse files
committed
Use Ibexa TTL cache config to cache relation, sibling and children endpoints
1 parent e0fc35f commit 6e2bff9

File tree

6 files changed

+60
-12
lines changed

6 files changed

+60
-12
lines changed

bundle/Controller/ContentRelations.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace Netgen\Bundle\OpenApiIbexaBundle\Controller;
66

7+
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
78
use Netgen\IbexaSiteApi\API\Values\Content;
89
use Netgen\OpenApiIbexa\Page\ContentList;
910
use Netgen\OpenApiIbexa\Page\Output\OutputVisitor;
10-
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1111
use Symfony\Component\HttpFoundation\JsonResponse;
1212
use Symfony\Component\HttpFoundation\Request;
1313
use Symfony\Component\HttpFoundation\Response;
@@ -18,9 +18,10 @@
1818
use const JSON_THROW_ON_ERROR;
1919
use const JSON_UNESCAPED_SLASHES;
2020

21-
final class ContentRelations extends AbstractController
21+
final class ContentRelations extends Controller
2222
{
2323
public function __construct(
24+
private ConfigResolverInterface $configResolver,
2425
private OutputVisitor $outputVisitor,
2526
private int $defaultLimit,
2627
) {}
@@ -42,11 +43,15 @@ public function __invoke(Request $request, Content $content, string $fieldIdenti
4243

4344
$data = $this->outputVisitor->visit(new ContentList($relatedContent));
4445

45-
return new JsonResponse(
46+
$response = new JsonResponse(
4647
json_encode($data, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES),
4748
Response::HTTP_OK,
4849
[],
4950
true,
5051
);
52+
53+
$this->configureCache($this->configResolver, $response);
54+
55+
return $response;
5156
}
5257
}

bundle/Controller/ContentReverseRelations.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace Netgen\Bundle\OpenApiIbexaBundle\Controller;
66

7+
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
78
use Netgen\IbexaSiteApi\API\Values\Content;
89
use Netgen\OpenApiIbexa\Page\ContentList;
910
use Netgen\OpenApiIbexa\Page\Output\OutputVisitor;
10-
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1111
use Symfony\Component\HttpFoundation\JsonResponse;
1212
use Symfony\Component\HttpFoundation\Request;
1313
use Symfony\Component\HttpFoundation\Response;
@@ -18,9 +18,10 @@
1818
use const JSON_THROW_ON_ERROR;
1919
use const JSON_UNESCAPED_SLASHES;
2020

21-
final class ContentReverseRelations extends AbstractController
21+
final class ContentReverseRelations extends Controller
2222
{
2323
public function __construct(
24+
private ConfigResolverInterface $configResolver,
2425
private OutputVisitor $outputVisitor,
2526
private int $defaultLimit,
2627
) {}
@@ -42,11 +43,15 @@ public function __invoke(Request $request, Content $content, string $fieldIdenti
4243

4344
$data = $this->outputVisitor->visit(new ContentList($relatedContent));
4445

45-
return new JsonResponse(
46+
$response = new JsonResponse(
4647
json_encode($data, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES),
4748
Response::HTTP_OK,
4849
[],
4950
true,
5051
);
52+
53+
$this->configureCache($this->configResolver, $response);
54+
55+
return $response;
5156
}
5257
}

bundle/Controller/Controller.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Netgen\Bundle\OpenApiIbexaBundle\Controller;
6+
7+
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
8+
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
9+
use Symfony\Component\HttpFoundation\Response;
10+
11+
abstract class Controller extends AbstractController
12+
{
13+
protected function configureCache(ConfigResolverInterface $configResolver, Response $response): void
14+
{
15+
if (!((bool) $configResolver->getParameter('content.view_cache'))) {
16+
return;
17+
}
18+
19+
if ((bool) $configResolver->getParameter('content.ttl_cache')) {
20+
$response->setPublic();
21+
$response->setSharedMaxAge((int) $configResolver->getParameter('content.default_ttl'));
22+
}
23+
}
24+
}

bundle/Controller/LocationChildren.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace Netgen\Bundle\OpenApiIbexaBundle\Controller;
66

7+
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
78
use Netgen\IbexaSiteApi\API\Values\Location;
89
use Netgen\OpenApiIbexa\Page\LocationList;
910
use Netgen\OpenApiIbexa\Page\Output\OutputVisitor;
10-
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1111
use Symfony\Component\HttpFoundation\JsonResponse;
1212
use Symfony\Component\HttpFoundation\Request;
1313
use Symfony\Component\HttpFoundation\Response;
@@ -18,9 +18,10 @@
1818
use const JSON_THROW_ON_ERROR;
1919
use const JSON_UNESCAPED_SLASHES;
2020

21-
final class LocationChildren extends AbstractController
21+
final class LocationChildren extends Controller
2222
{
2323
public function __construct(
24+
private ConfigResolverInterface $configResolver,
2425
private OutputVisitor $outputVisitor,
2526
private int $defaultLimit,
2627
) {}
@@ -41,11 +42,15 @@ public function __invoke(Request $request, Location $location, int $maxPerPage,
4142

4243
$data = $this->outputVisitor->visit(new LocationList($children));
4344

44-
return new JsonResponse(
45+
$response = new JsonResponse(
4546
json_encode($data, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES),
4647
Response::HTTP_OK,
4748
[],
4849
true,
4950
);
51+
52+
$this->configureCache($this->configResolver, $response);
53+
54+
return $response;
5055
}
5156
}

bundle/Controller/LocationSiblings.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
namespace Netgen\Bundle\OpenApiIbexaBundle\Controller;
66

7+
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
78
use Netgen\IbexaSiteApi\API\Values\Location;
89
use Netgen\OpenApiIbexa\Page\LocationList;
910
use Netgen\OpenApiIbexa\Page\Output\OutputVisitor;
10-
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1111
use Symfony\Component\HttpFoundation\JsonResponse;
1212
use Symfony\Component\HttpFoundation\Request;
1313
use Symfony\Component\HttpFoundation\Response;
@@ -18,9 +18,10 @@
1818
use const JSON_THROW_ON_ERROR;
1919
use const JSON_UNESCAPED_SLASHES;
2020

21-
final class LocationSiblings extends AbstractController
21+
final class LocationSiblings extends Controller
2222
{
2323
public function __construct(
24+
private ConfigResolverInterface $configResolver,
2425
private OutputVisitor $outputVisitor,
2526
private int $defaultLimit,
2627
) {}
@@ -41,11 +42,15 @@ public function __invoke(Request $request, Location $location, int $maxPerPage,
4142

4243
$data = $this->outputVisitor->visit(new LocationList($siblings));
4344

44-
return new JsonResponse(
45+
$response = new JsonResponse(
4546
json_encode($data, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES),
4647
Response::HTTP_OK,
4748
[],
4849
true,
4950
);
51+
52+
$this->configureCache($this->configResolver, $response);
53+
54+
return $response;
5055
}
5156
}

bundle/Resources/config/services/controllers.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ services:
4444
class: Netgen\Bundle\OpenApiIbexaBundle\Controller\LocationChildren
4545
parent: netgen.openapi_ibexa.controller.base
4646
arguments:
47+
- '@ibexa.config.resolver'
4748
- '@netgen.openapi_ibexa.page.output.visitor.output_visitor'
4849
- '%netgen.openapi_ibexa.default_limit%'
4950
public: true
@@ -54,6 +55,7 @@ services:
5455
class: Netgen\Bundle\OpenApiIbexaBundle\Controller\LocationSiblings
5556
parent: netgen.openapi_ibexa.controller.base
5657
arguments:
58+
- '@ibexa.config.resolver'
5759
- '@netgen.openapi_ibexa.page.output.visitor.output_visitor'
5860
- '%netgen.openapi_ibexa.default_limit%'
5961
public: true
@@ -64,6 +66,7 @@ services:
6466
class: Netgen\Bundle\OpenApiIbexaBundle\Controller\ContentRelations
6567
parent: netgen.openapi_ibexa.controller.base
6668
arguments:
69+
- '@ibexa.config.resolver'
6770
- '@netgen.openapi_ibexa.page.output.visitor.output_visitor'
6871
- '%netgen.openapi_ibexa.default_limit%'
6972
public: true
@@ -74,6 +77,7 @@ services:
7477
class: Netgen\Bundle\OpenApiIbexaBundle\Controller\ContentReverseRelations
7578
parent: netgen.openapi_ibexa.controller.base
7679
arguments:
80+
- '@ibexa.config.resolver'
7781
- '@netgen.openapi_ibexa.page.output.visitor.output_visitor'
7882
- '%netgen.openapi_ibexa.default_limit%'
7983
public: true

0 commit comments

Comments
 (0)