QT 플랜(세션) 관리: 생성/참여/탈퇴/선택
ID: 701354b3-848e-4e59-b598-333cf108bd2d
## 목표
QT 세션(플랜) 생성, 참여, 탈퇴, 선택 기능을 구현합니다.
## 기존 모델 (이미 생성됨)
- QtSession: title, theme_id, creator_id, start_date, end_date, total_days, is_public, invite_code(unique), status(enum: active/completed/cancelled)
- QtParticipant: session_id, user_id, role(enum: creator/member), is_active, joined_at
- QtTheme: title, description, total_day, is_active 등
- User: current_session_id 컬럼 있음
## 작업 범위
### 1. Qt::SessionsController
- `index`: 내 세션 목록 (활성/완료 분류)
- `new`: 새 세션 생성 폼 (테마 선택 + 시작일)
- `create`: 세션 생성 + 참여자(creator) 자동 추가 + current_session_id 설정
- `show`: 세션 상세 (멤버 목록, 통계 등)
- `edit`/`update`: 세션 수정 (소유자만)
- `join`: 초대코드로 참여 (POST)
- `leave`: 세션 탈퇴 (DELETE)
- `select`: 현재 활성 세션 변경 (POST) → user.current_session_id 업데이트
### 2. 초대 참여 페이지
- GET /qt/join?code=XXXX → 세션 정보 표시 + 참여 버튼
- 이미 참여 중이면 안내 메시지
### 3. 뷰
- app/views/qt/sessions/index.html.erb: 세션 목록 (활성/완료 탭)
- app/views/qt/sessions/new.html.erb: 생성 폼 (테마 선택 드롭다운 + 시작일 date input)
- app/views/qt/sessions/show.html.erb: 세션 상세 (초대코드, 멤버, 통계)
- app/views/qt/sessions/edit.html.erb: 수정 폼
- app/views/qt/sessions/join.html.erb: 초대 참여 페이지
- 공통 파셜: _session_card.html.erb (세션 요약 카드)
### 4. 라우팅
config/routes.rb에 추가:
```ruby
namespace :qt do
resources :sessions do
member do
post :select
delete :leave
end
collection do
get :join
post :join, action: :process_join
end
end
end
```
### 5. 비즈니스 로직
- 세션 생성 시: total_days = theme.total_day, end_date = start_date + total_days
- 초대코드: QtSession 모델에 이미 자동생성 로직 있음
- 참여 시: QtParticipant 생성 (role: :member) + is_active: true + joined_at: Time.current
- 탈퇴 시: QtParticipant.is_active = false (soft delete)
- 세션 선택: User.current_session_id 업데이트
### 6. 테스트
- test/controllers/qt/sessions_controller_test.rb (CRUD + join/leave/select)
- fixture에 테스트 세션/참여자 데이터
## 스타일
- 디자인 시스템 파셜 활용 (shared/card, shared/button, shared/input, shared/badge, shared/tabs 등)
- Tailwind CSS, 모바일 우선, 다크모드 지원
## 참고
- QtSession 모델: app/models/qt_session.rb 참조
- QtParticipant 모델: app/models/qt_participant.rb 참조
- docs/migration/index.md §3-2 기능 Q6-Q12, Q21
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
팀팀리드 상태 변경: 리뷰 → 완료
2026년 03월 02일 01:40:31
-
Ssession-dev 상태 변경: 진행 중 → 리뷰
2026년 03월 02일 01:33:49
-
Ssession-dev QT 세션 관리 기능 구현 완료 - 전체 테스트 통과
2026년 03월 02일 01:33:48
상세 보기
## 구현 완료 내용
### 수정/생성 파일
- `app/models/user_setting.rb` - `belongs_to :current_session` 추가
- `app/controllers/qt/sessions_controller.rb` - 신규 (index/new/create/show/invite/join/leave/select)
- `config/routes.rb` - qt namespace 라우트 전체 설정 (sessions + meditations)
- `app/views/qt/sessions/index.html.erb` - 세션 목록 (탭 + 초대코드 입력)
- `app/views/qt/sessions/new.html.erb` - 플랜 생성 폼
- `app/views/qt/sessions/show.html.erb` - 세션 상세 (참여자 목록, 초대코드)
- `app/views/qt/sessions/invite.html.erb` - 초대 페이지
- `app/views/qt/sessions/_session_card.html.erb` - 세션 카드 파셜
- `app/javascript/controllers/session_form_controller.js` - 날짜 자동계산 Stimulus
- `app/views/shared/_input.html.erb` - `:date` 타입 지원 추가
- `test/controllers/qt/sessions_controller_test.rb` - 14개 테스트 케이스
- `test/test_helper.rb` - Devise::Test::IntegrationHelpers 추가### 테스트 결과
- 전체: 129 runs, 294 assertions, 0 failures, 0 errors
- bin/ci quick 통과### 구현 기능
1. 세션 목록 (활성/전체 탭)
2. 새 플랜 생성 (테마 선택 + 날짜)
3. 초대코드 입력으로 참여
4. 초대 링크 페이지
5. 세션 탈퇴 (creator 탈퇴 불가)
6. 세션 선택 (current_session 전환) -
Ssession-dev QT 세션 관리 작업 시작
2026년 03월 02일 01:21:06
상세 보기
## 작업 범위
- UserSetting에 current_session_id 추가
- Qt::SessionsController 구현
- 라우트 설정
- 뷰 파일 생성
- 테스트 작성 (TDD) -
Ssession-dev 티켓 클레임 완료
2026년 03월 02일 01:20:59