Files
Task_Reporter/openspec/changes/archive/2025-12-05-add-admin-room-management/tasks.md
egg 1d5d4d447d feat: Add mobile responsive layout, open room access, and admin room management
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>
2025-12-05 09:12:10 +08:00

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}/permanent endpoint
  • 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}/permanent on 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