diff --git a/src/Controller/AuthorController.php b/src/Controller/AuthorController.php index 11b91e9..4a2fb16 100644 --- a/src/Controller/AuthorController.php +++ b/src/Controller/AuthorController.php @@ -52,7 +52,8 @@ class AuthorController extends AbstractController return $this->render('pages/author.html.twig', [ 'author' => $author, 'npub' => $npub, - 'articles' => $articles + 'articles' => $articles, + 'is_author_profile' => true, ]); } diff --git a/src/Service/CacheService.php b/src/Service/CacheService.php new file mode 100644 index 0000000..346bd7c --- /dev/null +++ b/src/Service/CacheService.php @@ -0,0 +1,66 @@ +cache->get($cacheKey, function (ItemInterface $item) use ($npub, $cacheKey) { + $item->expiresAfter(3600); // 1 hour, adjust as needed + try { + $meta = $this->nostrClient->getNpubMetadata($npub); + $this->logger->info('Metadata:', ['meta' => json_encode($meta)]); + return json_decode($meta->content); + } catch (\Exception $e) { + $this->logger->error('Error getting user data.', ['exception' => $e]); + throw new MetadataRetrievalException('Failed to retrieve metadata', 0, $e); + } + }); + } catch (\Exception|InvalidArgumentException $e) { + $this->logger->error('Error getting user data.', ['exception' => $e]); + $content = new \stdClass(); + $content->name = substr($npub, 0, 8) . '…' . substr($npub, -4); + return $content; + } + } + + public function getRelays($npub) + { + $cacheKey = '3_' . $npub; + try { + return $this->cache->get($cacheKey, function (ItemInterface $item) use ($npub) { + $item->expiresAfter(3600); // 1 hour + try { + return $this->nostrClient->getNpubRelays($npub); + } catch (\Exception $e) { + $this->logger->error('Error getting relays.', ['exception' => $e]); + return []; + } + }); + } catch (InvalidArgumentException $e) { + $this->logger->error('Error getting relay data.', ['exception' => $e]); + return []; + } + } +} diff --git a/src/Service/MetadataRetrievalException.php b/src/Service/MetadataRetrievalException.php new file mode 100644 index 0000000..bcf0733 --- /dev/null +++ b/src/Service/MetadataRetrievalException.php @@ -0,0 +1,11 @@ +defaultRelaySet; + $relaySet->addRelay(new Relay('wss://profiles.nostr1.com')); // profile aggregator $this->logger->info('Getting metadata for npub', ['npub' => $npub]); // Npubs are converted to hex for the request down the line $request = $this->createNostrRequest( kinds: [KindsEnum::METADATA], - filters: ['authors' => [$npub]] + filters: ['authors' => [$npub]], + relaySet: $relaySet ); $events = $this->processResponse($request->send(), function($received) { @@ -115,11 +121,7 @@ class NostrClient $this->logger->info('Getting metadata for npub', ['response' => $events]); if (empty($events)) { - $meta = new \stdClass(); - $content = new \stdClass(); - $content->name = substr($npub, 0, 8) . '…' . substr($npub, -4); - $meta->content = json_encode($content); - return $meta; + throw new \Exception('No metadata found for npub: ' . $npub); } // Sort by date and return newest diff --git a/templates/components/Molecules/Card.html.twig b/templates/components/Molecules/Card.html.twig index 2f8306b..21f4008 100644 --- a/templates/components/Molecules/Card.html.twig +++ b/templates/components/Molecules/Card.html.twig @@ -4,7 +4,9 @@ {% if category %} {{ category }} {% else %} -
by
by