ViewGroupsController + 라우트 + 컨트롤러 테스트 구현
ID: 0e3dbea3-b536-4702-abde-bacf60513005
## 작업 내용
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 적용
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
팀팀리드 상태 변경: 할 일 → 완료
2026년 03월 17일 07:12:32