Files
Task_Reporter/openspec/changes/archive/2025-12-04-add-open-room-access/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

90 lines
3.3 KiB
Markdown

# Tasks: Add Open Room Access
## Phase 1: Backend - Room Visibility & Self-Join
### 1.1 Modify room listing to show all rooms
- [x] Update `room_service.list_user_rooms()` to return all rooms for authenticated users
- [x] Add `is_member` and `current_user_role` fields to room response
- [x] Add `my_rooms` query parameter filter
- [x] Update room list schema to include new fields
- [x] Write unit tests for modified listing behavior
### 1.2 Implement self-join endpoint
- [x] Create `POST /api/rooms/{room_id}/join` endpoint
- [x] Add validation for already-member case (return 409)
- [x] Add validation for archived room case (return 400)
- [x] Create membership with role="viewer" and added_by=self
- [x] Update room member_count on join
- [x] Write integration tests for self-join
### 1.3 Modify role change permissions for editors
- [x] Update `membership_service.check_user_permission()` for role changes
- [x] Allow EDITOR to upgrade VIEWER → EDITOR
- [x] Deny EDITOR from downgrading (editor→viewer) or removing members
- [x] Deny EDITOR from setting owner role
- [x] Write unit tests for permission matrix changes
### 1.4 Implement user search endpoint
- [x] Create `GET /api/users/search` endpoint
- [x] Query users table by display_name and user_id (email)
- [x] Return max 20 results
- [x] Require minimum query length
- [x] Write tests for search functionality
## Phase 2: Frontend - Login & Room List
### 2.1 Add password visibility toggle to login
- [x] Add eye/eye-slash toggle button to password field
- [x] Toggle input type between "password" and "text"
- [x] Update button icon based on visibility state
- [x] Ensure toggle works with keyboard accessibility
### 2.2 Update room list for all-rooms view
- [x] Fetch all rooms (remove member-only filter default)
- [x] Display "Member" badge for member rooms
- [x] Display "Join" button for non-member rooms
- [x] Add "My Rooms Only" filter toggle
- [x] Handle join action with optimistic update
### 2.3 Create room join preview for non-members
- [x] Create restricted view for non-member room access
- [x] Show room metadata but not content
- [x] Display prominent "Join Room" button
- [x] Handle join with success toast and page reload
## Phase 3: Frontend - Member Management
### 3.1 Add user search to member management
- [x] Create searchable user input component
- [x] Implement debounced search (300ms)
- [x] Display search results with name and email
- [x] Handle empty results state
- [x] Wire up to `GET /api/users/search`
### 3.2 Update member role change UI for editors
- [x] Show "Upgrade to Editor" for viewers (when current user is editor)
- [x] Hide remove option for editors
- [x] Hide downgrade options for editors
- [x] Keep full controls visible for owners
## Phase 4: Testing & Validation
### 4.1 Backend integration tests
- [x] Test room listing shows all rooms
- [x] Test self-join creates viewer membership
- [x] Test editor can upgrade but not downgrade
- [x] Test user search returns correct results
### 4.2 Frontend E2E tests
- [x] Test password visibility toggle
- [x] Test room list shows join buttons
- [x] Test self-join flow
- [x] Test member search and add flow
- [x] Test editor role limitations
## Validation Checklist
- [x] Run `openspec validate add-open-room-access --strict`
- [x] All existing tests pass
- [x] New tests cover all scenarios
- [x] Manual testing of full user flow