sojorn/sojorn_docs/features/posting-and-appreciate-fix.md
Patrick Britton 38653f5854 Sojorn Backend Finalization & Cleanup - Complete Migration from Supabase
##  Phase 1: Critical Feature Completion (Beacon Voting)
- Add VouchBeacon, ReportBeacon, RemoveBeaconVote methods to PostRepository
- Implement beacon voting HTTP handlers with confidence score calculations
- Register new beacon routes: /beacons/:id/vouch, /beacons/:id/report, /beacons/:id/vouch (DELETE)
- Auto-flag beacons at 5+ reports, confidence scoring (0.5 base + 0.1 per vouch)

##  Phase 2: Feed Logic & Post Distribution Integrity
- Verify unified feed logic supports all content types (Standard, Quips, Beacons)
- Ensure proper distribution: Profile Feed + Main/Home Feed for followers
- Beacon Map integration for location-based content
- Video content filtering for Quips feed

##  Phase 3: The Notification System
- Create comprehensive NotificationService with FCM integration
- Add CreateNotification method to NotificationRepository
- Implement smart deep linking: beacon_map, quip_feed, main_feed
- Trigger notifications for beacon interactions and cross-post comments
- Push notification logic with proper content type detection

##  Phase 4: The Great Supabase Purge
- Delete function_proxy.go and remove /functions/:name route
- Remove SupabaseURL, SupabaseKey from config.go
- Remove SupabaseID field from User model
- Clean all Supabase imports and dependencies
- Sanitize codebase of legacy Supabase references

##  Phase 5: Flutter Frontend Integration
- Implement vouchBeacon(), reportBeacon(), removeBeaconVote() in ApiService
- Replace TODO delay in video_comments_sheet.dart with actual publishComment call
- Fix compilation errors (named parameters, orphaned child properties)
- Complete frontend integration with Go API endpoints

##  Additional Improvements
- Fix compilation errors in threaded_comment_widget.dart (orphaned child property)
- Update video_comments_sheet.dart to use proper named parameters
- Comprehensive error handling and validation
- Production-ready notification system with deep linking

##  Migration Status: 100% Complete
- Backend: Fully migrated from Supabase to custom Go/Gin API
- Frontend: Integrated with new Go endpoints
- Notifications: Complete FCM integration with smart routing
- Database: Clean of all Supabase dependencies
- Features: All functionality preserved and enhanced

Ready for VPS deployment and production testing!
2026-01-30 09:24:31 -06:00

44 lines
1.5 KiB
Markdown

# Posting and Appreciate Issue Fix
## Symptoms
- One account could post and appreciate, another could not.
- Client showed `ClientFailed to fetch` with no useful error details.
## Root Causes
1) **Missing `user_settings` rows**
The failing account had no `user_settings` row, which `publish-post` relies on
when determining TTL defaults. That caused requests to fail silently.
2) **CORS headers missing on edge functions**
The browser blocked responses from `publish-post` and `appreciate`, producing
a generic `ClientFailed to fetch` instead of the real error response.
## Fixes Applied
### 1) Backfill `user_settings` and ensure new users get it
Migration added:
- Creates `user_settings` table if missing.
- Backfills rows for all existing users.
- Updates `handle_new_user` trigger to insert a `user_settings` row.
File: `supabase/migrations/20260121_create_user_settings.sql`
### 2) Add CORS headers to edge functions
Both edge functions now return CORS headers for **all** responses.
This prevents the browser from hiding the response body.
Files:
- `supabase/functions/publish-post/index.ts`
- `supabase/functions/appreciate/index.ts`
## Deployment Steps
1) Apply migrations (includes `20260121_create_user_settings.sql`).
2) Redeploy edge functions:
- `publish-post`
- `appreciate`
## Validation Checklist
- `select * from user_settings where user_id = '<user_id>';` returns a row.
- Posting succeeds for both accounts.
- Appreciating posts returns 200 and no browser CORS errors.