**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.
168 lines
4.5 KiB
Markdown
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
|