[ENTITY][Actor][COMPONENT][Tag] Add Actor->getNoteTags(?string $note_type)
which gets a cached list of NoteTags for notes of type $note_type for the actor
This commit is contained in:
parent
08587b6942
commit
ca9945a4be
@ -72,7 +72,7 @@ class Tag extends Component
|
|||||||
if (!self::validate($tag)) {
|
if (!self::validate($tag)) {
|
||||||
return null; // Ignore invalid tag candidates
|
return null; // Ignore invalid tag candidates
|
||||||
}
|
}
|
||||||
$canonical_tag = self::canonicalTag($tag, \is_null($lang_id) ? null : Language::getById($lang_id)->getLocale());
|
$canonical_tag = self::canonicalTag($tag, \is_null($lang_id) ? null : Language::getById($lang_id)->getLocale());
|
||||||
DB::persist($note_tag = NoteTag::create([
|
DB::persist($note_tag = NoteTag::create([
|
||||||
'tag' => $tag,
|
'tag' => $tag,
|
||||||
'canonical' => $canonical_tag,
|
'canonical' => $canonical_tag,
|
||||||
@ -86,6 +86,35 @@ class Tag extends Component
|
|||||||
return $note_tag;
|
return $note_tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return NoteTag[]
|
||||||
|
*/
|
||||||
|
public static function getNoteTags(int $actor_id, ?string $note_type): array
|
||||||
|
{
|
||||||
|
$query = <<<'EOF'
|
||||||
|
select nt from \App\Entity\Note n
|
||||||
|
join \Component\Tag\Entity\NoteTag nt with n.id = nt.note_id
|
||||||
|
where n.actor_id = :id
|
||||||
|
EOF;
|
||||||
|
if (\is_null($note_type)) {
|
||||||
|
return Cache::getList(
|
||||||
|
Actor::cacheKeys($actor_id, 'any')['note-tags'],
|
||||||
|
fn () => DB::dql(
|
||||||
|
$query,
|
||||||
|
['id' => $actor_id],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return Cache::getList(
|
||||||
|
Actor::cacheKeys($actor_id, $note_type)['note-tags'],
|
||||||
|
fn () => DB::dql(
|
||||||
|
$query . ' and n.type = :type',
|
||||||
|
['id' => $actor_id, 'type' => $note_type],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process note by extracting any tags present
|
* Process note by extracting any tags present
|
||||||
*/
|
*/
|
||||||
|
@ -42,6 +42,7 @@ use Component\Group\Entity\LocalGroup;
|
|||||||
use Component\Language\Entity\ActorLanguage;
|
use Component\Language\Entity\ActorLanguage;
|
||||||
use Component\Language\Entity\Language;
|
use Component\Language\Entity\Language;
|
||||||
use Component\Subscription\Entity\ActorSubscription;
|
use Component\Subscription\Entity\ActorSubscription;
|
||||||
|
use Component\Tag\Tag;
|
||||||
use Functional as F;
|
use Functional as F;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -263,7 +264,8 @@ class Actor extends Entity
|
|||||||
'id' => "actor-id-{$actor_id}",
|
'id' => "actor-id-{$actor_id}",
|
||||||
'nickname' => "actor-nickname-id-{$actor_id}",
|
'nickname' => "actor-nickname-id-{$actor_id}",
|
||||||
'fullname' => "actor-fullname-id-{$actor_id}",
|
'fullname' => "actor-fullname-id-{$actor_id}",
|
||||||
'self-tags' => "actor-self-tags-{$actor_id}",
|
'self-tags' => "actor-self-tags-{$actor_id}",
|
||||||
|
'note-tags' => "actor-note-tags-{$actor_id}-{$other}", // $other is note type
|
||||||
'circles' => "actor-circles-{$actor_id}",
|
'circles' => "actor-circles-{$actor_id}",
|
||||||
'subscribers' => "subscribers-{$actor_id}",
|
'subscribers' => "subscribers-{$actor_id}",
|
||||||
'subscribed' => "subscribed-{$actor_id}",
|
'subscribed' => "subscribed-{$actor_id}",
|
||||||
@ -347,6 +349,14 @@ class Actor extends Entity
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return NoteTag[]
|
||||||
|
*/
|
||||||
|
public function getNoteTags(?string $note_type = null): array
|
||||||
|
{
|
||||||
|
return Tag::getNoteTags($this->getId(), $note_type);
|
||||||
|
}
|
||||||
|
|
||||||
private function getSubCount(string $which, string $column): int
|
private function getSubCount(string $which, string $column): int
|
||||||
{
|
{
|
||||||
return Cache::get(
|
return Cache::get(
|
||||||
|
Loading…
Reference in New Issue
Block a user