백로그
0할 일
0진행 중
0리뷰
0완료 (전체)
1ViewGroupsController + 라우트 + 컨트롤러 테스트 구현
## 작업 내용 ViewGroupsController 및 라우팅을 TDD로 구현합니다. ## 라우트 설계 locale scope 안에 배치 (기존 패턴 준수): ```ruby resources :view_groups, only: [:index, :show, :new, :create, :destroy] do member do delete :leave get :team_strength end end get "view_groups/join/:invite_code", to: "view_groups#join", as: :join_view_group post "view_groups/join/:invite_code", to: "view_groups#process_join" ``` ## 컨트롤러 액션 ### index - 로그인 필수 - 자신이 소유하거나 멤버인 그룹 목록 표시 - `@owned_groups = current_user.view_groups` - `@joined_groups = ViewGroup.joins(:view_group_members).where(view_group_members: { user_id: current_user.id })` ### show - 로그인 필수 + 소유자 또는 멤버만 - 그룹 상세 (QR코드, 초대링크, 멤버 목록) ### new / create - 로그인 필수 - 그룹 이름 입력 → 생성 (invite_code 자동 발급) - 소유자는 자동으로 view_group_members에 추가하지 않음 (별도 user_id) ### destroy - 소유자만 삭제 가능 - dependent: :destroy로 멤버 전부 제거 ### join (GET) - 로그인 필수 (비로그인 → 로그인 → return_to) - invite_code로 그룹 찾기 - 이미 소유자 → "이미 그룹 소유자입니다" 안내 - 이미 멤버 → "이미 참여한 그룹입니다" 안내 - report_purchased: true인 진단 세션 목록 표시 → 선택하여 참여 ### process_join (POST) - diagnosis_session_id 파라미터 필수 - ViewGroupMember 생성 - 성공 → 그룹 show로 리다이렉트 ### leave (DELETE) - 멤버만 나가기 가능 - 소유자는 나가기 불가 → "그룹을 삭제하세요" 안내 (flash alert) ### team_strength (GET) - 소유자 또는 멤버만 접근 - ViewGroups::TeamStrengthAnalyzer 호출 - member_ids 파라미터 지원 (선택적 필터) ## 인가 매트릭스 | 액션 | 비로그인 | 일반 사용자 | 그룹 멤버 | 그룹 소유자 | |------|---------|-----------|----------|-----------| | index | redirect login | 자기 그룹만 | 자기 그룹만 | 자기 그룹만 | | show | redirect login | X | O | O | | create | redirect login | O | - | - | | destroy | redirect login | X | X | O | | join | redirect login | O (코드 유효시) | 이미 멤버 안내 | 이미 소유자 안내 | | leave | redirect login | X | O | X (소유자 불가) | | team_strength | redirect login | X | O | O | ## 참고 파일 - `app/controllers/workspaces_controller.rb` — join/process_join 패턴 참고 - `app/controllers/concerns/authentication.rb` — require_authentication 패턴 - `config/routes.rb` — 기존 라우팅 패턴 ## 완료 기준 - [ ] 컨트롤러 테스트 통과 (CRUD, join, leave, 권한, 비로그인 리다이렉트) - [ ] 비로그인 → 로그인 → return_to join URL 리다이렉트 정상 - [ ] 진단 미구매 사용자 참여 차단 + 안내 메시지 - [ ] 소유자 나가기 차단 + 안내 메시지 - [ ] strong parameters 적용