query('page', 1)); $viewer = $request->user()?->id; $result = $this->trendingService->getTrending($viewer, $page); $formatted = array_map( fn ($post) => $this->feedService->formatPost($post, $viewer), $result['data'], ); return response()->json(['data' => array_values($formatted), 'meta' => $result['meta']]); } public function hashtag(Request $request, string $tag): JsonResponse { $tag = mb_strtolower(preg_replace('/[^A-Za-z0-9_]/', '', $tag)); if (strlen($tag) < 2 || strlen($tag) > 64) { return response()->json(['message' => 'Invalid hashtag.'], 422); } $page = max(1, (int) $request->query('page', 1)); $viewer = $request->user()?->id; $result = $this->feedService->getHashtagFeed($tag, $viewer, $page); $formatted = array_map( fn ($post) => $this->feedService->formatPost($post, $viewer), $result['data'], ); return response()->json([ 'tag' => $tag, 'data' => array_values($formatted), 'meta' => $result['meta'], ]); } public function trendingHashtags(): JsonResponse { $tags = Cache::remember('trending_hashtags', 300, function () { return $this->hashtagService->trending(10, 24); }); return response()->json(['hashtags' => $tags]); } }