sojorn/CHAT_DELETE_DEPLOYMENT.md
Patrick Britton 3c4680bdd7 Initial commit: Complete threaded conversation system with inline replies
**Major Features Added:**
- **Inline Reply System**: Replace compose screen with inline reply boxes
- **Thread Navigation**: Parent/child navigation with jump functionality
- **Chain Flow UI**: Reply counts, expand/collapse animations, visual hierarchy
- **Enhanced Animations**: Smooth transitions, hover effects, micro-interactions

 **Frontend Changes:**
- **ThreadedCommentWidget**: Complete rewrite with animations and navigation
- **ThreadNode Model**: Added parent references and descendant counting
- **ThreadedConversationScreen**: Integrated navigation handlers
- **PostDetailScreen**: Replaced with threaded conversation view
- **ComposeScreen**: Added reply indicators and context
- **PostActions**: Fixed visibility checks for chain buttons

 **Backend Changes:**
- **API Route**: Added /posts/:id/thread endpoint
- **Post Repository**: Include allow_chain and visibility fields in feed
- **Thread Handler**: Support for fetching post chains

 **UI/UX Improvements:**
- **Reply Context**: Clear indication when replying to specific posts
- **Character Counting**: 500 character limit with live counter
- **Visual Hierarchy**: Depth-based indentation and styling
- **Smooth Animations**: SizeTransition, FadeTransition, hover states
- **Chain Navigation**: Parent/child buttons with visual feedback

 **Technical Enhancements:**
- **Animation Controllers**: Proper lifecycle management
- **State Management**: Clean separation of concerns
- **Navigation Callbacks**: Reusable navigation system
- **Error Handling**: Graceful fallbacks and user feedback

This creates a Reddit-style threaded conversation experience with smooth
animations, inline replies, and intuitive navigation between posts in a chain.
2026-01-30 07:40:19 -06:00

168 lines
4.5 KiB
Markdown

# Chat Deletion Feature - Deployment Guide
## Summary
Fixed the chat deletion functionality to make it **permanent** with proper warnings. Users now get a clear warning dialog before deletion, and the system removes data from both the server database and local IndexedDB storage.
---
## Changes Made
### 1. Backend (Go) - DELETE Endpoints Added
**Files Modified:**
- `go-backend/internal/repository/chat_repository.go` - Added `DeleteConversation()` and `DeleteMessage()` methods
- `go-backend/internal/handlers/chat_handler.go` - Added DELETE handler endpoints
- `go-backend/cmd/api/main.go` - Registered DELETE routes
**New API Endpoints:**
- `DELETE /api/v1/conversations/:id` - Permanently deletes conversation and all messages
- `DELETE /api/v1/messages/:id` - Permanently deletes a single message
**Security:**
- Verifies user is a participant before allowing deletion
- Returns 401 Unauthorized if user doesn't have permission
### 2. Flutter App - Permanent Deletion
**Files Modified:**
- `sojorn_app/lib/services/api_service.dart` - Added `deleteConversation()` and `deleteMessage()` API methods
- `sojorn_app/lib/services/secure_chat_service.dart` - Updated to call backend DELETE API
- `sojorn_app/lib/screens/secure_chat/secure_chat_screen.dart` - Enhanced warning dialog
**Key Changes:**
- Delete now removes data from **both** server database and local IndexedDB
- New warning dialog with:
- ⚠️ Red warning icon and "PERMANENT DELETION" title
- Bullet points showing what will be deleted
- Red warning box stating "THIS ACTION CANNOT BE UNDONE"
- Red "DELETE PERMANENTLY" button
- Cannot be dismissed by tapping outside
- Loading indicator during deletion
- Success/error feedback
---
## Deployment Steps
### Step 1: Delete All Existing Chats from Database
**SSH into your server:**
```bash
ssh -i "C:\Users\Patrick\.ssh\mpls.pem" patrick@194.238.28.122
```
**Password:** `P22k154ever!`
**Run the SQL script:**
```bash
sudo -u postgres psql sojorn
```
Then paste this SQL:
```sql
BEGIN;
-- Delete all messages first (foreign key dependency)
DELETE FROM public.secure_messages;
-- Delete all conversations
DELETE FROM public.encrypted_conversations;
COMMIT;
-- Verify deletion
SELECT COUNT(*) as message_count FROM public.secure_messages;
SELECT COUNT(*) as conversation_count FROM public.encrypted_conversations;
```
Expected output:
```
message_count: 0
conversation_count: 0
```
Type `\q` to exit psql.
### Step 2: Deploy Go Backend
**From your local machine, deploy the updated backend:**
```powershell
cd c:\Webs\Sojorn\go-backend
.\scripts\deploy.sh
```
Or manually:
```bash
# On server
cd /home/patrick/sojorn-backend
git pull
go build -o sojorn-api ./cmd/api
sudo systemctl restart sojorn-api
sudo systemctl status sojorn-api
```
### Step 3: Hot Restart Flutter App
**No deployment needed** - just hot restart the Flutter web app:
1. In your browser, press `R` or refresh the page
2. Or run: `flutter run -d chrome --web-port 8080`
---
## Testing the Fix
1. **Start a new conversation** with another user
2. **Send a few test messages**
3. **Click the 3-dot menu** in the chat screen
4. **Select "Delete Chat"**
5. **Verify the warning dialog shows:**
- Red warning icon
- "PERMANENT DELETION" title
- List of what will be deleted
- Red warning box
- "DELETE PERMANENTLY" button
6. **Click "DELETE PERMANENTLY"**
7. **Verify:**
- Loading indicator appears
- Success message shows
- Chat screen closes
- Conversation is removed from list
- Messages are gone from database (check with SQL)
- Messages are gone from IndexedDB (check browser DevTools > Application > IndexedDB)
---
## What's Fixed
### Before:
- ❌ Delete only removed local IndexedDB data
- ❌ Server data remained (encrypted messages still in DB)
- ❌ Weak warning dialog
- ❌ Deletion wasn't permanent
- ❌ Other user could still see messages
### After:
- ✅ Deletes from **both** server database and local storage
- ✅ Strong warning dialog with multiple warnings
-**PERMANENT** deletion - cannot be undone
- ✅ Both users lose all messages
- ✅ Proper loading and error handling
- ✅ Authorization checks (only participants can delete)
---
## SQL Script Location
The SQL script to delete all chats is saved at:
`c:\Webs\Sojorn\migrations_archive\delete_all_chats.sql`
---
## Notes
- The E2EE key fixes from earlier are still in place
- Users will need to hot restart to get the new OTK fixes
- After deleting all chats, users can start fresh with properly working E2EE
- The delete function now works correctly for future conversations