mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-28 20:50:06 +02:00
Automatically update the sidebar trees for all users if the trees are changed somehow.
This commit is contained in:
parent
2bd41eee60
commit
4c25e85a48
5 changed files with 73 additions and 0 deletions
|
@ -75,6 +75,11 @@ class TreeCacheInvalidationListener
|
|||
if ($element instanceof AbstractStructuralDBElement || $element instanceof LabelProfile) {
|
||||
$secure_class_name = str_replace('\\', '_', get_class($element));
|
||||
$this->cache->invalidateTags([$secure_class_name]);
|
||||
|
||||
//Trigger a sidebar reload for all users (see SidebarTreeUpdater service)
|
||||
if(!$element instanceof LabelProfile) {
|
||||
$this->cache->invalidateTags(['sidebar_tree_update']);
|
||||
}
|
||||
}
|
||||
|
||||
//If a user change, then invalidate all cached trees for him
|
||||
|
|
38
src/Services/Trees/SidebarTreeUpdater.php
Normal file
38
src/Services/Trees/SidebarTreeUpdater.php
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services\Trees;
|
||||
|
||||
use Symfony\Contracts\Cache\CacheInterface;
|
||||
use Symfony\Contracts\Cache\ItemInterface;
|
||||
use Symfony\Contracts\Cache\TagAwareCacheInterface;
|
||||
|
||||
final class SidebarTreeUpdater
|
||||
{
|
||||
private const CACHE_KEY = 'sidebar_tree_updated';
|
||||
private const TTL = 60 * 60 * 24; // 24 hours
|
||||
|
||||
private CacheInterface $cache;
|
||||
|
||||
public function __construct(TagAwareCacheInterface $treeCache)
|
||||
{
|
||||
$this->cache = $treeCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the time when the sidebar tree was updated the last time.
|
||||
* The frontend uses this information to reload the sidebar tree.
|
||||
* @return \DateTimeInterface
|
||||
* @throws \Psr\SimpleCache\InvalidArgumentException
|
||||
*/
|
||||
public function getLastTreeUpdate(): \DateTimeInterface
|
||||
{
|
||||
return $this->cache->get(self::CACHE_KEY, function (ItemInterface $item) {
|
||||
$item->expiresAfter(self::TTL);
|
||||
|
||||
//This tag and therfore this whole cache gets cleared by TreeCacheInvalidationListener when a structural element is changed
|
||||
$item->tag('sidebar_tree_update');
|
||||
|
||||
return new \DateTime();
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue