DB 모델 구축: User + UserSetting + QT 핵심 모델 4개

ID: a7717af1-e263-4e51-984f-30f5e5843512

긴급 완료

## 목표
Rails 8.1.2 프로젝트에 핵심 DB 모델 6개를 TDD로 구축합니다.

## 작업 범위
### 1. Devise 설치 및 User 모델
- `rails generate devise:install` 실행
- User 모델 마이그레이션 (UUID PK): email, nickname, provider, provider_id, role(enum: user/admin), profile_image, phone, notification_enabled, notification_time, current_session_id
- 인덱스: email(unique), [provider, provider_id](unique)
- Devise 모듈: :database_authenticatable, :omniauthable (omniauth_providers: [:google_oauth2, :kakao])

### 2. UserSetting 모델
- user_id(FK unique), timezone(default: Asia/Seoul), language(default: ko), preferred_difficulty(default: 3), auto_next_day(default: true), current_session_id
- User has_one :user_setting

### 3. QtTheme 모델
- title, description, is_default, is_active, total_day, is_ai_generated, generation_status(enum: draft/generating/completed/published), user_id(FK nullable)
- User has_many :qt_themes

### 4. QtContent 모델
- theme_id(FK), day_number, bible_passage, theme_title, content, questions(JSON array), difficulty(default: 3), week_number, reading_passage, estimated_minutes, tags, bible_chapter, bible_verse
- QtTheme has_many :qt_contents

### 5. QtSession 모델
- title, theme_id(FK), creator_id(FK->users), start_date, end_date, total_days, is_public, invite_code(unique 8자), max_participants, status(enum: active/completed/cancelled)
- QtTheme has_many :qt_sessions

### 6. QtParticipant 모델
- session_id(FK), user_id(FK), role(enum: creator/member), is_active, joined_at
- unique index: [session_id, user_id]
- QtSession has_many :qt_participants

## 기술 요구사항
- 모든 테이블 UUID PK (id: :uuid)
- ApplicationRecord에 `self.implicit_order_column = "created_at"` 이미 설정됨
- enum은 Rails 8 방식 사용
- 모델 테스트 (validations, associations, scopes) 작성
- fixtures 작성

## 참고
- docs/migration/index.md §2 데이터 모델 참조

첨부 이미지

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

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

담당자: db-models
생성일: 2026년 03월 02일 00:45

활동 로그

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

    2026년 03월 02일 01:05:14

  • D
    db-models 상태 변경: 진행 중 → 리뷰

    2026년 03월 02일 01:04:03

  • D
    db-models Task #2 완료: QT 핵심 모델 4개 생성 (전체 78 tests 통과)

    2026년 03월 02일 01:04:02

    상세 보기

    ## 변경 파일
    ### 마이그레이션
    - `db/migrate/20260302094812_create_qt_themes.rb`
    - `db/migrate/20260302094813_create_qt_contents.rb`
    - `db/migrate/20260302094814_create_qt_sessions.rb`
    - `db/migrate/20260302094815_create_qt_participants.rb`

    ### 모델
    - `app/models/qt_theme.rb` - enum, scopes, validations, associations
    - `app/models/qt_content.rb` - validations, JSON questions 컬럼
    - `app/models/qt_session.rb` - enum, invite_code 자동생성, scopes
    - `app/models/qt_participant.rb` - enum, joined_at 자동설정
    - `app/models/user.rb` - QT 관련 associations 추가 (qt_themes, qt_participants)
    - `app/models/application_record.rb` - UUID 자동생성 조건 단순화

    ### 테스트
    - `test/models/qt_theme_test.rb` - 13 tests
    - `test/models/qt_content_test.rb` - 13 tests
    - `test/models/qt_session_test.rb` - 15 tests
    - `test/models/qt_participant_test.rb` - 13 tests
    - `test/fixtures/` - qt_themes, qt_contents, qt_sessions, qt_participants

    ### 설정 변경
    - `test/test_helper.rb` - parallelize(workers: 1) (SQLite UUID 호환)
    - `config/environments/test.rb` - maintain_test_schema = false
    - `memory/known-patterns.md` - UUID/JSON/Fixture 패턴 기록

    ## 테스트 결과
    78 runs, 144 assertions, 0 failures, 0 errors, 0 skips

  • D
    db-models Task #1 완료: Devise + User/UserSetting 모델 생성

    2026년 03월 02일 00:57:24

    상세 보기

    ## 변경 파일
    - `config/initializers/devise.rb` - Devise 설치
    - `db/migrate/20260302094810_create_users.rb` - Users 테이블
    - `db/migrate/20260302094811_create_user_settings.rb` - UserSettings 테이블
    - `app/models/user.rb` - User 모델 (Devise, enum, validations)
    - `app/models/user_setting.rb` - UserSetting 모델
    - `app/models/application_record.rb` - UUID 자동생성 콜백 추가
    - `test/models/user_test.rb` - 12 tests
    - `test/models/user_setting_test.rb` - 10 tests
    - `test/fixtures/users.yml` - 3 fixtures
    - `test/fixtures/user_settings.yml` - 2 fixtures
    - `config/environments/test.rb` - maintain_test_schema = false (SQLite UUID 호환)

    ## 해결한 이슈
    - SQLite UUID PK: schema.rb가 uuid 타입을 덤프 못함 → maintain_test_schema=false + 직접 마이그레이션
    - UUID 자동생성: SQLite에서 UUID 자동생성 안됨 → ApplicationRecord before_create 콜백
    - omniauth-kakao: gem v0.2.0 존재하지 않음 → 임시 비활성화 (Task #3 담당)

    ## 테스트 결과
    22 runs, 43 assertions, 0 failures, 0 errors

  • D
    db-models Task #1 시작: Devise 설치 + User/UserSetting 모델 생성

    2026년 03월 02일 00:47:34

    상세 보기

    ## 작업 계획
    - Devise 설치 및 설정
    - User 마이그레이션 (UUID PK)
    - UserSetting 마이그레이션
    - 모델 코드 작성 (validations, enums, associations)
    - Fixture 작성
    - 테스트 작성 및 실행

  • D
    db-models 티켓 클레임 완료

    2026년 03월 02일 00:47:29