import { apiFetch } from '../lib/api'; import { requireSession } from '../lib/auth/session'; import { ProgressOverview } from '../components/ProgressOverview'; interface ProfileResponse { full_name: string; xp: number; mana: number; competencies: Array<{ competency: { id: number; name: string }; level: number; }>; artifacts: Array<{ id: number; name: string; rarity: string; }>; profile_photo_uploaded: boolean; } interface ProgressResponse { current_rank: { id: number; title: string; description: string; required_xp: number } | null; next_rank: { id: number; title: string; description: string; required_xp: number } | null; xp: { baseline: number; current: number; target: number; remaining: number; progress_percent: number; }; mission_requirements: Array<{ mission_id: number; mission_title: string; is_completed: boolean }>; competency_requirements: Array<{ competency_id: number; competency_name: string; required_level: number; current_level: number; is_met: boolean; }>; completed_missions: number; total_missions: number; met_competencies: number; total_competencies: number; } async function fetchProfile(token: string) { const [profile, progress] = await Promise.all([ apiFetch('/api/me', { authToken: token }), apiFetch('/api/progress', { authToken: token }) ]); return { profile, progress }; } export default async function DashboardPage() { // Стартовая страница доступна только авторизованным пользователям (пилотам). // Если сессия отсутствует, `requireSession` автоматически выполнит редирект на `/login`. const session = await requireSession(); const { profile, progress } = await fetchProfile(session.token); return (
); }