백로그
0할 일
0진행 중
0리뷰
0완료 (15일)
2사용자 관리 인덱스 개선 + 인라인 역할 수정 + 진단 뷰어
관리자 사용자 관리 페이지를 개선합니다. ## 요구사항 ### 1. 인덱스 테이블 컬럼 추가 현재 index에는 이름/이메일/역할/생성일만 표시됩니다. 다음 컬럼을 추가하세요: - **전화번호**: user_profiles 테이블의 phone_country_code + phone_number (예: +82 1012345678) - **소속 워크스페이스**: workspace_members를 통한 워크스페이스 이름 목록 (쉼표 구분) - **진단**: 진단 세션 수 (클릭 시 목록 표시) ### 2. 컨트롤러 수정 (app/controllers/admin/users_controller.rb) - index 액션에서 `includes(:profile, :workspaces, :diagnosis_sessions)` eager loading 추가 - 검색(q 파라미터)에서 전화번호 검색도 지원: `LEFT JOIN user_profiles ON user_profiles.user_id = users.id` 후 phone_number ILIKE 검색 추가 - `update_role` 액션 추가: PATCH 요청으로 역할만 업데이트, Turbo Stream으로 응답 ### 3. 인라인 역할 수정 - 역할 컬럼에서 역할 뱃지를 클릭하면 드롭다운(select)이 나타나도록 - Turbo Frame 또는 Stimulus 컨트롤러 사용 - 역할 선택 시 즉시 PATCH 요청으로 서버에 저장 - 성공 시 뱃지로 다시 표시 ### 4. 진단 목록 뷰어 - 진단 수를 클릭하면 해당 사용자의 진단 세션 목록이 표시되도록 - Turbo Frame으로 진단 목록을 로드하거나 모달 사용 - 진단 목록에 표시할 정보: 진단 유형, 상태, 완료일 ### 5. i18n - 새로 추가되는 텍스트의 번역 키를 config/locales/ko.yml에 추가 ## 주요 파일 - `app/controllers/admin/users_controller.rb` - `app/views/admin/users/index.html.erb` - `config/routes.rb` (update_role 라우트 추가 필요시) - `config/locales/ko.yml` - Stimulus 컨트롤러가 필요하면 `app/javascript/controllers/` 에 생성 ## 참고 - 전화번호는 users 테이블이 아닌 user_profiles에 있음 (phone_country_code, phone_number) - User 모델에 `has_one :profile, class_name: "UserProfile"` 연관 있음 - User 모델에 `has_many :workspaces, through: :workspace_members` 연관 있음 - 기존 role_label, role_badge_class 헬퍼가 이미 존재함 - 현재 정렬 가능 컬럼: name, email_address, role, created_at
사용자 관리 기능 테스트 작성
사용자 관리 기능의 테스트를 작성합니다. ## 테스트 범위 ### 1. 컨트롤러 테스트 (test/controllers/admin/users_controller_test.rb) - index 액션: 전화번호 검색이 정상 동작하는지 - index 액션: 워크스페이스, 진단 수가 올바르게 표시되는지 - update_role 액션: 역할 변경이 정상 동작하는지 - update_role 액션: 권한 없는 사용자가 접근 시 거부되는지 ### 2. 통합 테스트 (test/integration/admin/users_test.rb) - admin이 아닌 사용자가 접근 시 리다이렉트 - 인덱스 페이지에 전화번호, 워크스페이스, 진단 수가 표시되는지 - 역할 변경 플로우 ## 참고사항 - 기존 테스트 파일이 있으면 확장, 없으면 새로 생성 - fixtures 확인 후 적절한 테스트 데이터 사용 - Rails Minitest 사용 (RSpec 아님) - 대시보드에 테스트 결과 기록할 것 ## 의존성 - impl-dev의 구현이 완료된 후 작업 시작