check()) { $user = auth()->user(); $defaultPage = $user->resolved_settings['default_login_page']; $route = match ($defaultPage) { 'feed_first' => $user->following()->count() > 0 ? 'feed' : 'profile.view', 'feed' => 'feed', 'profile' => 'profile.view', 'dashboard' => 'dashboard', }; $args = $route == 'profile.view' ? $user->name : null; return redirect()->route($route, $args); } return redirect()->route('login'); } public static function getUserFlightApiURL(User $user){ return '/data/user/'.$user->name.'/flights'; } public function profileData(User $user, string $view, ?int $selectedFlightId = null) : array { return [ 'user' => $user, 'canEdit' => (auth()->check() && auth()->id() === $user->id) || (auth()->check() && auth()->user()->hasRole('admin')), 'initialView' => $view, 'selectedFlightId' => $selectedFlightId, 'flight_api_url' => self::getUserFlightApiURL($user), 'isFollowing' => auth()->check() && auth()->user()->isFollowing($user), 'flightCount' => $user->departedFlights()->count(), ]; } public function departureBoard(User $user, ?UserFlight $flight = null){ $profileData = $this->profileData($user, 'board', $flight?->id); return Inertia::render('UserProfile', $profileData); } public function map(User $user){ $profileData = $this->profileData($user, 'map'); return Inertia::render('UserProfile', $profileData); } public function boardingPasses(User $user){ $profileData = $this->profileData($user, 'passes'); return Inertia::render('UserProfile', $profileData); } public function view(User $user) { $loggedInUser = auth()->user(); $isPrivate = $user->resolved_settings['private_profile']; if ($isPrivate && $user->id !== $loggedInUser?->id) { if (!$loggedInUser || !$loggedInUser->isFollowing($user)) { abort(404); } } $defaultView = $loggedInUser ? $loggedInUser->resolved_settings['default_profile_view'] : 'map'; return match($defaultView) { 'boarding-passes' => $this->boardingPasses($user), 'map' => $this->map($user), 'departure-board' => $this->departureBoard($user), 'achievements' => redirect()->route('profile.achievements', $user->name), }; } public function flight(User $user, UserFlight $userFlight) { if($userFlight->user_id !== $user->id){ abort(404); } return Inertia::render('UserFlight', [ 'flightCount' => $user->departedFlights()->count(), 'flight' => $userFlight->snapshot($userFlight->id), 'canEdit' => auth()->check() && auth()->id() === $user->id, 'user' => $user, 'isFollowing' => auth()->check() && auth()->user()->isFollowing($user), ]); } }