# chat-room Specification Delta ## ADDED Requirements ### Requirement: Admin Permanent Room Deletion The system SHALL provide system administrators with the ability to permanently delete rooms, including all associated data (members, messages, files, reports). This operation is irreversible and restricted to system administrators only. #### Scenario: Admin permanently deletes a room - **WHEN** a system administrator sends `DELETE /api/rooms/{room_id}/permanent` - **THEN** the system SHALL verify the user is ymirliu@panjit.com.tw - **AND** hard delete the room record from incident_rooms table - **AND** cascade delete all room_members records - **AND** cascade delete all messages and related reactions/edit_history - **AND** cascade delete all room_files records - **AND** delete associated files from MinIO storage - **AND** cascade delete all generated_reports records - **AND** delete associated report files from MinIO storage - **AND** broadcast disconnect event to any active WebSocket connections in the room - **AND** return status 200 with `{"message": "Room permanently deleted"}` #### Scenario: Non-admin attempts permanent deletion - **WHEN** a non-admin user sends `DELETE /api/rooms/{room_id}/permanent` - **THEN** the system SHALL return status 403 with "Only system administrators can permanently delete rooms" #### Scenario: Permanent delete non-existent room - **WHEN** a system administrator sends `DELETE /api/rooms/{room_id}/permanent` for a non-existent room - **THEN** the system SHALL return status 404 with "Room not found" ### Requirement: Hide Archived Rooms from Non-Admin Users The system SHALL hide rooms with ARCHIVED status from non-admin users in all listing operations, ensuring historical/archived data is only visible to system administrators. #### Scenario: Non-admin lists rooms with any filter - **WHEN** a non-admin user sends `GET /api/rooms` with any status filter (including no filter) - **THEN** the system SHALL exclude all rooms with status "archived" from the response - **AND** only return rooms with status "active" or "resolved" #### Scenario: Non-admin explicitly requests archived rooms - **WHEN** a non-admin user sends `GET /api/rooms?status=archived` - **THEN** the system SHALL return an empty list - **AND** return total count of 0 #### Scenario: Admin can view archived rooms - **WHEN** a system administrator sends `GET /api/rooms?status=archived` - **THEN** the system SHALL return all archived rooms - **AND** include full room details #### Scenario: Admin views all rooms including archived - **WHEN** a system administrator sends `GET /api/rooms` without status filter - **THEN** the system SHALL return all rooms regardless of status - **AND** include archived rooms in the response ## MODIFIED Requirements ### Requirement: List and Filter Incident Rooms The system SHALL provide endpoints to list incident rooms with filtering capabilities by status, incident type, severity, date range, and user membership. The system SHALL automatically exclude rooms with ARCHIVED status from listing results for non-admin users, ensuring archived rooms are only visible to system administrators. #### Scenario: List all active rooms for current user - **WHEN** an authenticated user sends `GET /api/rooms?status=active` - **THEN** the system SHALL return all active rooms - **AND** include room metadata (title, type, severity, member count, last activity) - **AND** sort by last_activity_at descending (most recent first) #### Scenario: Non-admin user lists rooms without status filter - **WHEN** a non-admin user sends `GET /api/rooms` without status parameter - **THEN** the system SHALL return rooms with status "active" or "resolved" only - **AND** automatically exclude archived rooms from results