sojorn/sojorn_docs/legacy/LINKS_FIX.md

25 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Links Fix Profile Deep Link Bug
## Issue
- Clicking any user profile link (e.g., from a post, notification, or shared URL) always opened the current users profile instead of the target profile.
- Root cause: GoRouter tab shell state was local to `HomeShell` (an `IndexedStack` driven by `_currentIndex`), so `context.go('/u/<handle>')` left the UI stuck on the “Profile” tab (current user view) even when the route was for another user.
- Backend `GetProfile` endpoint only returned full profile data by user ID; when the app requested by handle it fell back to the signedin user, reinforcing the wrong profile display.
## Fix
- Frontend routing:
- Replaced manual `IndexedStack` shell with GoRouter `StatefulShellRoute.indexedStack`; tab index now follows router state.
- `/profile` (current user) is a shell branch; `/u/:username` is a separate root route that renders `ViewableProfileScreen` so it no longer competes with the shell tab.
- `HomeShell` now uses the GoRouter navigation shell (no local `_currentIndex`) and passes branch index to quips for playback pausing.
- `ViewableProfileScreen` ownership check now compares both authenticated user id and handle against the requested handle.
- Backend:
- `GetProfile` now accepts `?handle=<username>` and resolves in order: handle → :id → auth user.
- `GetProfileByHandle` returns full profile fields (id, handle, display_name, bio, avatar_url, origin_country, onboarding flag, created_at) so clients can render the viewed user.
## Files Touched
- Frontend: `lib/routes/app_routes.dart`, `lib/screens/home/home_shell.dart`, `lib/screens/auth/auth_gate.dart`, `lib/screens/auth/category_select_screen.dart`, `lib/screens/quips/feed/quips_feed_screen.dart`, `lib/screens/profile/viewable_profile_screen.dart`.
- Backend: `internal/handlers/user_handler.go`, `internal/repository/user_repository.go`.
## Deployment Notes
- Backend binary rebuilt at `/opt/sojorn/go-backend/bin/sojorn-api` (tests pass). Needs sudo to copy over `/opt/sojorn/bin/sojorn-api` and restart `sojorn-api.service`.
- Frontend changes live in the local workspace; rebuild/deploy the app to pick up the routing fix.