import { redirect } from 'next/navigation'; import FeedLayout from '@/components/feed/FeedLayout'; import { getAuthService } from '@/lib/auth'; import { getFeedRepository, getRaceRepository, getResultRepository, } from '@/lib/di-container'; export const dynamic = 'force-dynamic'; export default async function DashboardPage() { const authService = getAuthService(); const session = await authService.getCurrentSession(); if (!session) { redirect('/auth/iracing?returnTo=/dashboard'); } const feedRepository = getFeedRepository(); const raceRepository = getRaceRepository(); const resultRepository = getResultRepository(); const [feedItems, upcomingRaces, allResults] = await Promise.all([ feedRepository.getFeedForDriver(session.user.primaryDriverId ?? ''), raceRepository.findAll(), resultRepository.findAll(), ]); const upcoming = upcomingRaces .filter((race) => race.status === 'scheduled') .sort((a, b) => a.scheduledAt.getTime() - b.scheduledAt.getTime()) .slice(0, 5); const completedRaces = upcomingRaces.filter((race) => race.status === 'completed'); const latestResults = completedRaces.slice(0, 4).map((race) => { const raceResults = allResults.filter((result) => result.raceId === race.id); const winner = raceResults.sort((a, b) => a.position - b.position)[0]; return { raceId: race.id, leagueId: race.leagueId, track: race.track, car: race.car, scheduledAt: race.scheduledAt, winnerDriverId: winner?.driverId ?? '', winnerName: 'Race Winner', positionChange: winner ? winner.getPositionChange() : 0, }; }); return (

Dashboard

Personalized activity from your friends, leagues, and teams.

); }