[모임] QT 플랜 연동 + 출석 체크 시스템

ID: e9b0085a-0e39-40a2-8574-471ac705d6c9

높음 완료

QtSession에 group_id 추가 + 모임 내 QT 생성 시 멤버 자동 참여 + 출석 QR 생성 + 체크인 플로우 + 지각 판정. 상세 내용은 기존 todo 티켓 참조.

첨부 이미지

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

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

담당자: qt-link-dev
생성일: 2026년 03월 03일 12:40

활동 로그

  • O
    orchestrator 상태 변경: 리뷰 → 완료

    2026년 03월 03일 14:31:12

  • Q
    qt-link-dev 상태 변경: 할 일 → 리뷰

    2026년 03월 03일 13:01:10

  • Q
    qt-link-dev QT 플랜 연동 + 출석 체크 시스템 구현 완료

    2026년 03월 03일 13:01:10

    상세 보기

    ## 구현 내용

    ### 1. QtSession에 group_id 추가
    - 마이그레이션: `add_column :qt_sessions, :group_id, :string` + 인덱스
    - `QtSession belongs_to :group, optional: true`
    - `Group has_many :qt_sessions, dependent: :nullify`

    ### 2. Group 모델 확장
    - `meeting_today?` 메서드: daily/weekly/monthly 반복 주기별 오늘 모임 여부 판정
    - `qt_enabled?` 메서드 추가
    - `has_many :qt_sessions` 연관 관계

    ### 3. GroupQtSessionsController (new, create)
    - 관리자만 QT 플랜 생성 가능
    - 생성 시 모임 active 멤버 전원 자동 `QtParticipant` 생성
    - 라우팅: `resources :groups do resources :qt_sessions end`

    ### 4. AttendancesController#check
    - `GET /attend/:token` 출석 체크 엔드포인트
    - 멤버 확인, 모임일 확인, 중복 방지
    - 지각 자동 판정 (`meeting_time + late_minutes`)

    ### 5. 뷰 업데이트 (groups/show)
    - QT 플랜 목록 표시 (empty_state → 실제 데이터)
    - "QT 플랜 생성" 버튼 (관리자만)
    - 오늘 출석 현황 표시 (멤버 이름, 체크 시각, 상태 배지)
    - 출석 QR URL 표시 (관리자만)

    ### 6. 테스트
    - `test/models/group_test.rb`: meeting_today? 5개 + qt_sessions 연관 1개 (총 27 runs)
    - `test/controllers/group_qt_sessions_controller_test.rb`: 7 tests (인증, 권한, CRUD)
    - `test/controllers/attendances_controller_test.rb`: 8 tests (인증, 토큰, 멤버, 중복, 지각)

    ### 수정 파일
    - `db/migrate/20260303080000_add_group_id_to_qt_sessions.rb` (신규)
    - `app/models/qt_session.rb` (group 연관 추가)
    - `app/models/group.rb` (qt_sessions, meeting_today?, qt_enabled?)
    - `app/controllers/group_qt_sessions_controller.rb` (신규)
    - `app/controllers/attendances_controller.rb` (신규)
    - `app/views/group_qt_sessions/new.html.erb` (신규)
    - `app/views/groups/show.html.erb` (QT플랜/출석 영역 업데이트)
    - `config/routes.rb` (nested qt_sessions route 추가)

    ### 테스트 결과
    657 runs, 1640 assertions, 0 failures, 0 errors