[모임] 출석 통계/리포트 (Chart.js)

ID: 6727988f-d17f-4abf-aada-5dbd1179feaa

보통 완료

모임 관리자용 출석 통계 대시보드. 기간별 출석률, 멤버별 랭킹, Chart.js 차트 3종 (라인/도넛/바). SQL GROUP BY 집계. 상세 내용은 기존 todo 티켓 참조.

첨부 이미지

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

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

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

활동 로그

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

    2026년 03월 03일 14:31:14

  • S
    stats-dev 상태 변경: 할 일 → 리뷰

    2026년 03월 03일 13:00:46

  • S
    stats-dev 출석 통계/리포트 (Chart.js) 구현 완료

    2026년 03월 03일 13:00:42

    상세 보기

    ## 변경 사항

    ### 새 파일
    - `app/controllers/attendance_stats_controller.rb` - 출석 통계 컨트롤러
    - `app/views/attendance_stats/show.html.erb` - 통계 뷰 (Chart.js 3종 차트)
    - `test/controllers/attendance_stats_controller_test.rb` - 컨트롤러 테스트 (10건)

    ### 수정 파일
    - `config/routes.rb` - `resource :attendance_stats, only: [:show]` nested route 추가
    - `app/views/groups/show.html.erb` - 관리자용 "통계" 버튼 추가
    - `test/fixtures/attendance_records.yml` - 통계 테스트용 fixture 7건 추가

    ## 구현 내용

    ### AttendanceStatsController
    - `show` 액션: 기간별(week/month/all) 출석 통계 조회
    - 권한: 관리자/모임장만 접근 가능
    - N+1 방지: SQL GROUP BY로 상태별/일자별/멤버별 집계
    - `calculate_member_stats`: 멤버별 출석률, 개근 여부 계산
    - `count_meetings_in_range`: recurrence_type별 기간 내 모임일 수 계산

    ### 뷰 (Chart.js)
    - 기간 선택 탭 (이번 주/이번 달/전체)
    - 상태별 요약 카드 (출석/지각/결석 수)
    - 도넛 차트: 출석/지각/결석 비율
    - 라인 차트: 일별 출석 추이
    - 바 차트: 멤버별 출석률
    - 멤버별 상세 테이블 (개근자 하이라이트)
    - 기존 chart_controller.js Stimulus 재사용 (다크모드 자동 대응)
    - 데이터 없음 시 empty_state 표시

    ### 테스트 (10건 전체 통과)
    - 비로그인 접근 불가
    - 관리자/모임장 접근 가능
    - 일반 멤버 접근 불가
    - 기간 필터 (week/month/all)
    - 상태별 집계 정확성
    - 멤버별 통계 테이블 렌더링
    - Chart.js 컴포넌트 렌더링

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