[함께보기 PR1] DB 레이어: ViewGroup + ViewGroupMember 모델

ID: 33ef2964-7309-4068-a9f3-4ac5316de80e

높음 완료

## 설명
"함께 보기" 기능의 DB 모델 레이어 구현.

## DB 설계

### view_groups
- id: uuid (PK)
- name: string, null: false, max 50자
- invite_code: string, unique, null: false (SecureRandom.alphanumeric(8).upcase)
- user_id: uuid, FK(users), null: false (소유자)
- created_at, updated_at

### view_group_members
- id: uuid (PK)
- view_group_id: uuid, FK(view_groups), null: false
- user_id: uuid, FK(users), null: false
- diagnosis_session_id: uuid, FK(diagnosis_sessions), null: false
- created_at, updated_at
- unique index: [view_group_id, user_id]

## 모델 규칙
- ViewGroup: belongs_to :user (소유자), has_many :view_group_members, dependent: :destroy
- ViewGroupMember: belongs_to :view_group, belongs_to :user, belongs_to :diagnosis_session
- invite_code는 생성 시 자동 발급 (before_create)
- 소유자는 view_group_members에 포함하지 않음 (별도 user_id로 관리)

## 완료 기준
- [ ] 마이그레이션 migrate/rollback/migrate 성공
- [ ] 모델 테스트 통과 (유효성, 연관관계, invite_code 고유성)
- [ ] fixtures 생성 (view_groups.yml, view_group_members.yml)
- [ ] diagnosis_session은 report_purchased: true인 것만 연결 가능

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: 팀리드
생성일: 2026년 03월 17일 06:32

활동 로그

  • 팀리드 상태 변경: 리뷰 → 완료

    2026년 03월 17일 07:54:10

  • 팀리드 팀 작업 완료 - [함께보기 PR1] DB 레이어

    2026년 03월 17일 06:49:25

    상세 보기

    ## 수정된 기능
    - ViewGroup + ViewGroupMember 모델, 마이그레이션, 테스트, fixtures 구현 완료

    ## 생성/수정 파일
    - `db/migrate/20260317064325_create_view_groups.rb`
    - `db/migrate/20260317064334_create_view_group_members.rb`
    - `app/models/view_group.rb` (신규)
    - `app/models/view_group_member.rb` (신규)
    - `app/models/user.rb` (has_many 추가)
    - `test/fixtures/view_groups.yml`, `view_group_members.yml` (신규)
    - `test/models/view_group_test.rb` (13개 테스트)
    - `test/models/view_group_member_test.rb` (11개 테스트)

    ## QA 검증 결과
    - 테스트: 24/24 통과, 38 assertions, 0 failures
    - 보안: FK 제약, unique 인덱스, 이중 보호 모두 정상
    - 종합: 리뷰 진행 가능 (Critical/High 이슈 없음)

    ## Minor 이슈 (즉각 수정 불필요)
    - `is_report_purchased` → `is_report_purchased?` 권장
    - `diagnosis_session_id` 단독 인덱스 미추가 (향후 필요 시 추가)

  • 팀리드 상태 변경: 진행 중 → 리뷰

    2026년 03월 17일 06:49:16

  • 팀리드 위임: developer-1에게 '마이그레이션 + 모델 + 테스트 + fixtures 구현' 작업 배정

    2026년 03월 17일 06:41:56

  • 팀리드 작업 시작 - [함께보기 PR1] DB 레이어

    2026년 03월 17일 06:41:50

    상세 보기

    ## 작업 계획
    - 목표: ViewGroup + ViewGroupMember 모델, 마이그레이션, 테스트, fixtures 생성
    - 접근 방식: developer 1명이 TDD로 전체 구현, qa-verifier가 검증

    ## 현재 상태
    - 보드 현황: backlog 5 / in_progress 1 / done 137
    - 관련 기존 작업: 함께보기 기능 계획 (5개 PR 시리즈의 첫 번째)

  • 팀리드 티켓 클레임 완료

    2026년 03월 17일 06:41:39

  • 팀리드 기능 계획 수립 - 함께 보기

    2026년 03월 17일 06:33:23

    상세 보기

    ## 기능 개요
    - 커리어테크 아래 "함께 보기" 메뉴 신설
    - 개인이 그룹 생성 → QR코드로 초대 → 팀강점 매트릭스 함께 보기
    - Workspace와 달리 경량 구조 (승인/크레딧/결제 없음)

    ## 분석 결과
    - 영향 범위: 모델 2개 신규, 컨트롤러 1개 신규, 뷰 5개, 서비스 1개, 사이드바/하단탭 수정
    - 기존 패턴: Workspace의 invite_code, QrCodeHelper, TeamStrengthAnalyzer 참고
    - 재사용: rqrcode gem, QrCodeHelper#qr_code_svg, 팀강점 차트 데이터 구조

    ## 생성된 티켓 (5개)
    1. [함께보기 PR1] DB 레이어 (priority: high)
    2. [함께보기 PR2] TeamStrengthAnalyzer 서비스 (priority: high)
    3. [함께보기 PR3] 컨트롤러 + 라우트 (priority: high)
    4. [함께보기 PR4] 뷰 (priority: high)
    5. [함께보기 PR5] 네비게이션 + i18n (priority: medium)

    ## 의사결정 사항
    - 참여 시 진단 세션 선택 필수 (report_purchased: true만)
    - 소유자 나가기 → 그룹 삭제
    - 전 locale에서 메뉴 표시
    - 무료 검사로는 참여 불가

    ## 리스크
    - TeamStrengthAnalyzer 결합도 → 별도 서비스로 분리하여 기존 코드 영향 없음
    - 모바일 비로그인 QR → return_to 리다이렉트 활용

  • 팀리드 상태 변경: 할 일 → 백로그

    2026년 03월 17일 06:32:59