Mobile Responsive Layout: - Add useMediaQuery, useIsMobile, useIsTablet, useIsDesktop hooks for device detection - Create MobileHeader component with hamburger menu and action drawer - Create BottomToolbar for mobile navigation (Files, Members) - Create SlidePanel component for full-screen mobile sidebars - Update RoomDetail.tsx with mobile/desktop conditional rendering - Update RoomList.tsx with single-column grid and touch-friendly buttons - Add CSS custom properties for safe areas and touch targets (min 44px) - Add mobile viewport meta tags for notched devices Open Room Access: - All authenticated users can view all rooms (not just their own) - Users can join active rooms they're not members of - Add is_member field to room responses - Update room list API to return all rooms by default Admin Room Management: - Add permanent delete functionality for system admins - Add delete confirmation dialog with room title verification - Broadcast room deletion via WebSocket to connected users - Add users search API for adding members 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
3.3 KiB
3.3 KiB
Tasks: Add Admin Room Management
Phase 1: Backend - Hide Archived Rooms
1.1 Modify room listing to exclude archived for non-admin
- Update
room_service.list_user_rooms()to filter out ARCHIVED status for non-admin - Ensure admin users can still see all statuses
- Handle case where non-admin explicitly requests
status=archived(return empty) - Write unit tests for filtered listing behavior
1.2 Update room count queries
- Ensure total count excludes archived for non-admin
- Verify pagination works correctly with filtered results
Phase 2: Backend - Permanent Deletion
2.1 Fix room_files foreign key constraint
- Add
ondelete="CASCADE"to room_files.room_id foreign key - Create database migration or rebuild schema
2.2 Create permanent delete service method
- Add
permanent_delete_room()method to room_service - Implement cascading delete for all related tables
- Add MinIO file cleanup logic
- Handle WebSocket broadcast for room deletion event
2.3 Create permanent delete endpoint
- Add
DELETE /api/rooms/{room_id}/permanentendpoint - Implement admin-only authorization check
- Return appropriate error responses (403 for non-admin, 404 for not found)
- Write integration tests
Phase 3: Frontend - Status Filter Changes
3.1 Add admin detection to frontend
- Create utility to check if current user is admin
- Store admin status in auth store or derive from username
3.2 Update room list status filter
- Conditionally render filter options based on admin status
- Remove "All Status" and "Archived" for non-admin users
- Keep default filter as "Active"
- Test filter behavior for both user types
Phase 4: Frontend - Permanent Delete UI
4.1 Add delete button to room detail
- Create "Delete Room Permanently" button (admin only)
- Style with warning/danger color scheme
- Position in room settings or header actions
4.2 Implement confirmation dialog
- Create confirmation modal with warning text
- List what will be deleted (members, messages, files, reports)
- Add optional room name confirmation input
- Implement cancel and confirm buttons
4.3 Handle deletion flow
- Call DELETE
/api/rooms/{room_id}/permanenton confirm - Show loading state during deletion
- Navigate to room list on success
- Display error toast on failure
4.4 Handle WebSocket room deletion event
- Listen for room_deleted event in WebSocket handler
- Display notification to affected users
- Navigate users away from deleted room
Phase 5: Testing & Validation
5.1 Backend tests
- Test non-admin cannot see archived rooms
- Test admin can see all rooms including archived
- Test permanent delete endpoint authorization
- Test cascading delete removes all related data
- Test MinIO cleanup on permanent delete
5.2 Frontend tests
- Test status filter options for admin vs non-admin
- Test delete button visibility
- Test confirmation dialog flow
- Test WebSocket room deletion handling
Validation Checklist
- Run
openspec validate add-admin-room-management --strict - All existing tests pass
- New tests cover all scenarios
- Manual testing of full admin flow
- Manual testing of non-admin restrictions