Skip to content

Commit b721182

Browse files
FFWEB-2686: Cache field roles as they are searched for on every request
1 parent 78e883d commit b721182

8 files changed

Lines changed: 81 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# Changelog
2+
## Unreleased
3+
- SSR
4+
- Cache field roles
5+
26
## [v4.2.2] - 2023.03.16
37
### Add
48
- Proxy

src/Api/UpdateFieldRolesController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Omikron\FactFinder\Shopware6\Api;
66

77
use Exception;
8-
use Omikron\FactFinder\Shopware6\Config\FieldRoles;
8+
use Omikron\FactFinder\Shopware6\Config\FieldRolesInterface;
99
use Shopware\Core\Framework\Context;
1010
use Shopware\Core\Framework\DataAbstractionLayer\EntityCollection;
1111
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
@@ -20,10 +20,10 @@
2020
*/
2121
class UpdateFieldRolesController extends AbstractController
2222
{
23-
private FieldRoles $fieldRoles;
23+
private FieldRolesInterface $fieldRoles;
2424
private EntityRepositoryInterface $channelRepository;
2525

26-
public function __construct(FieldRoles $fieldRolesService, EntityRepositoryInterface $channelRepository)
26+
public function __construct(FieldRolesInterface $fieldRolesService, EntityRepositoryInterface $channelRepository)
2727
{
2828
$this->fieldRoles = $fieldRolesService;
2929
$this->channelRepository = $channelRepository;

src/Config/CachedFieldRoles.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Omikron\FactFinder\Shopware6\Config;
6+
7+
use Symfony\Component\Cache\Adapter\AdapterInterface;
8+
9+
class CachedFieldRoles implements FieldRolesInterface
10+
{
11+
private FieldRolesInterface $decorated;
12+
private AdapterInterface $cache;
13+
14+
public function __construct(FieldRolesInterface $decorated, AdapterInterface $cache)
15+
{
16+
$this->decorated = $decorated;
17+
$this->cache = $cache;
18+
}
19+
20+
public function getRoles(?string $salesChannelId): array
21+
{
22+
$salesChannelId = $salesChannelId ?? '';
23+
$cacheKey = $this->getCacheKey($salesChannelId);
24+
$item = $this->cache->getItem($cacheKey);
25+
26+
if ($item->isHit()) {
27+
return $item->get();
28+
}
29+
30+
$fieldRoles = $this->decorated->getRoles($salesChannelId);
31+
$item->set($fieldRoles);
32+
$this->cache->save($item);
33+
34+
return $fieldRoles;
35+
}
36+
37+
public function update(
38+
array $fieldRoles,
39+
?string $salesChannelId
40+
): void {
41+
$salesChannelId = $salesChannelId ?? '';
42+
$this->decorated->update($fieldRoles, $salesChannelId);
43+
$cacheKey = $this->getCacheKey($salesChannelId);
44+
45+
if ($this->cache->hasItem($cacheKey)) {
46+
$this->cache->deleteItem($cacheKey);
47+
}
48+
}
49+
50+
private function getCacheKey(string $salesChannelId): string
51+
{
52+
return sprintf('factfinder-field-roles-%s', $salesChannelId);
53+
}
54+
}

src/Config/FieldRoles.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Shopware\Core\System\SystemConfig\SystemConfigService;
99
use function Omikron\FactFinder\Shopware6\Internal\Utils\safeGetByName;
1010

11-
class FieldRoles
11+
class FieldRoles implements FieldRolesInterface
1212
{
1313
private Search $search;
1414
private Communication $communicationConfig;

src/Config/FieldRolesInterface.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Omikron\FactFinder\Shopware6\Config;
6+
7+
interface FieldRolesInterface
8+
{
9+
public function getRoles(?string $salesChannelId): array;
10+
11+
public function update(array $fieldRoles, ?string $salesChannelId): void;
12+
}

src/Resources/config/services.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
<bind key="$configurationAddParams">%factfinder.configuration.add_params%</bind>
7676
<bind key="$communicationParameters">%factfinder.communication.parameters.base%</bind>
7777
<bind key="$entryRepository" type="service" id="factfinder_feed_preprocessor.repository" />
78+
<bind key="$cache" type="service" id="cache.object" />
7879
</defaults>
7980

8081
<service id="Omikron\FactFinder\Shopware6\Communication\AdapterFactory" />
@@ -182,5 +183,7 @@
182183
<argument type="service" id="Omikron\FactFinder\Shopware6\Utilites\Ssr\Template\Filter"/>
183184
</service>
184185
<service id="Omikron\FactFinder\Shopware6\Utilites\Ssr\Template\Engine" />
186+
<service id="Omikron\FactFinder\Shopware6\Config\FieldRolesInterface"
187+
alias="Omikron\FactFinder\Shopware6\Config\FieldRoles" />
185188
</services>
186189
</container>

src/Utilites/Ssr/PriceFormatter.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Omikron\FactFinder\Shopware6\Utilites\Ssr;
66

7-
use Omikron\FactFinder\Shopware6\Config\FieldRoles;
7+
use Omikron\FactFinder\Shopware6\Config\CachedFieldRoles;
88
use Omikron\FactFinder\Shopware6\Export\SalesChannelService;
99
use Shopware\Core\System\Currency\CurrencyFormatter;
1010
use Shopware\Core\System\SalesChannel\SalesChannelContext;
@@ -20,7 +20,7 @@ class PriceFormatter
2020
public function __construct(
2121
SalesChannelService $channelService,
2222
CurrencyFormatter $currencyFormatter,
23-
FieldRoles $fieldRolesService,
23+
CachedFieldRoles $fieldRolesService,
2424
array $fieldRoles
2525
) {
2626
$this->channelService = $channelService;

src/Utilites/Ssr/Template/Filter.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Omikron\FactFinder\Shopware6\Utilites\Ssr\Template;
66

7-
use Omikron\FactFinder\Shopware6\Config\FieldRoles;
7+
use Omikron\FactFinder\Shopware6\Config\CachedFieldRoles;
88
use Omikron\FactFinder\Shopware6\Export\Filter\FilterInterface;
99
use Omikron\FactFinder\Shopware6\Export\SalesChannelService;
1010

@@ -14,7 +14,7 @@ class Filter implements FilterInterface
1414

1515
public function __construct(
1616
SalesChannelService $channelService,
17-
FieldRoles $fieldRolesService
17+
CachedFieldRoles $fieldRolesService
1818
) {
1919
$context = $channelService->getSalesChannelContext();
2020
$this->fieldRoles = $fieldRolesService->getRoles($context->getSalesChannelId());

0 commit comments

Comments
 (0)