import { Metadata } from 'next' import { notFound } from 'next/navigation' import { getUserInfo, getTeams, getRaidGroups } from '~/app/lib/data' import ProfilePageClient from './ProfilePageClient' // Dynamic metadata export async function generateMetadata({ params }: { params: { username: string } }): Promise { try { const userData = await getUserInfo(params.username) // If user doesn't exist, use default metadata if (!userData || !userData.user) { return { title: 'User not found / granblue.team', description: 'This user could not be found' } } return { title: `@${params.username}'s Teams / granblue.team`, description: `Browse @${params.username}'s Teams and filter by raid, element or recency` } } catch (error) { return { title: 'User not found / granblue.team', description: 'This user could not be found' } } } export default async function ProfilePage({ params, searchParams }: { params: { username: string }; searchParams: { element?: string; raid?: string; recency?: string; page?: string } }) { try { // Extract query parameters with type safety const element = searchParams.element ? parseInt(searchParams.element, 10) : undefined; const raid = searchParams.raid; const recency = searchParams.recency; const page = searchParams.page ? parseInt(searchParams.page, 10) : 1; // Parallel fetch data with Promise.all for better performance const [userData, teamsData, raidGroupsData] = await Promise.all([ getUserInfo(params.username), getTeams({ username: params.username, element, raid, recency, page }), getRaidGroups() ]) // If user doesn't exist, show 404 if (!userData || !userData.user) { notFound() } const initialData = { user: userData.user, teams: teamsData.results || [], raidGroups: raidGroupsData || [], pagination: { current_page: page, total_pages: teamsData.meta?.total_pages || 1, record_count: teamsData.meta?.count || 0 } } return (
) } catch (error) { console.error(`Error fetching profile data for ${params.username}:`, error) notFound() } }