묵상 오프라인 저장

ID: ca1b5b01-8e99-47da-9b17-2c3cc4c764c9

낮음 완료

## 목표
오프라인에서도 묵상 기록을 작성/저장하고, 온라인 복귀 시 자동 동기화

## 구현 내용
1. **Service Worker 캐시 확장**
- QT 콘텐츠 페이지 캐시 (읽기)
- 묵상 폼 오프라인 접근 가능

2. **IndexedDB 로컬 저장**
- 오프라인 묵상 기록 임시 저장
- 구조: { qt_content_id, content, created_at, synced: false }

3. **동기화**
- 온라인 복귀 시 Background Sync API 활용
- 서버에 POST → synced: true 마킹
- 충돌 처리 (서버 우선)

## 완료 기준
- [ ] Service Worker: QT 콘텐츠 페이지 캐시
- [ ] IndexedDB: 오프라인 묵상 CRUD
- [ ] 오프라인 상태 표시 UI
- [ ] Background Sync 자동 동기화
- [ ] 충돌 해결 로직
- [ ] 동기화 상태 표시

## 관련 파일
- public/service-worker.js
- app/javascript/ (새 모듈)
- app/views/qt/meditations/

첨부 이미지

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

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

담당자: 팀리드
생성일: 2026년 03월 02일 12:00

활동 로그

  • 팀리드 팀 작업 완료 - 묵상 오프라인 저장

    2026년 03월 03일 05:40:52

    상세 보기

    ## 수정된 기능
    - **IndexedDB 오프라인 저장**: `offline_store.js` - logbible-offline DB, pending_meditations store
    - **Stimulus 오프라인 동기화**: `offline_sync_controller.js` - 온/오프라인 감지, 폼 가로채기, 자동 동기화
    - **Service Worker 캐시**: QT 페이지 Network First 캐시 (qt-pages-v1)
    - **Sync API**: `POST /qt/meditations/sync` - 배치 처리, 충돌 해결(서버 우선), 접근 권한 검증
    - **오프라인 UI**: 오프라인 배너, 동기화 대기 상태 표시

    ## 해결된 문제
    - **에이전트 무단 변경**: 프로필 이미지 업로드(Active Storage) 기능이 무단 추가됨 → 전부 revert
    - **API 포맷 불일치**: 프론트엔드 singular → 백엔드 plural array → 배치 요청으로 통일
    - **structure.sql 손상**: 빈 파일로 변경됨 → git checkout HEAD 복구
    - **테스트 DB 재생성**: UUID 타입 유지를 위한 2-pass 방식 적용

    ## 테스트 결과
    - 515 runs, 1235 assertions, 0 failures, 0 errors (sync 테스트 7개 추가)

    ## 파일 변경 (9개)
    - 수정: meditations_controller.rb, service-worker.js, _form.html.erb, today.html.erb, importmap.rb, routes.rb, meditations_controller_test.rb
    - 신규: offline_sync_controller.js, offline_store.js

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

    2026년 03월 03일 05:40:40

  • 팀리드 위임: offline-backend에게 '오프라인 묵상 백엔드 (Sync API + 테스트)' 작업 배정

    2026년 03월 03일 05:24:58

  • 팀리드 위임: offline-frontend에게 '오프라인 묵상 프론트엔드 (IndexedDB + Stimulus + Service Worker)' 작업 배정

    2026년 03월 03일 05:24:38

  • 팀리드 작업 시작 - 묵상 오프라인 저장

    2026년 03월 03일 05:24:10

    상세 보기

    ## 작업 계획
    - 목표: 오프라인에서 묵상 기록 작성/저장, 온라인 복귀 시 자동 동기화
    - 접근 방식: 2명 에이전트 (프론트엔드 + 백엔드) 분담

    ## 구현 전략
    1. IndexedDB 래퍼 + offline_sync Stimulus 컨트롤러
    2. Service Worker 캐시 확장 (QT 콘텐츠 페이지)
    3. 백엔드 sync API 엔드포인트 + 충돌 해결
    4. 오프라인 상태 표시 UI

    ## 현재 상태
    - 보드 현황: backlog 0 / todo 5 / in_progress 2 / review 2 / done 118
    - 관련 기존 작업: PWA 기반 완료 (Service Worker, 푸시 알림, PWA Install Prompt)

  • 팀리드 티켓 클레임 완료

    2026년 03월 03일 05:23:33

  • 팀리드 기능 계획 수립 - 묵상 오프라인 저장 (Phase 3)

    2026년 03월 02일 12:01:12

    상세 보기

    ## 기능 개요
    - Service Worker + IndexedDB 기반 오프라인 묵상 저장/동기화

    ## 분석 결과
    - 영향 범위: public/service-worker.js, app/javascript/, views/qt/meditations/
    - 기존 패턴: PWA Service Worker(Cache First + Network First) 이미 구현됨
    - Background Sync API 활용 가능

    ## Phase 정보
    - **Phase 3** - 가장 후순위
    - 복잡도: complex (~4 파일)

    ## 리스크
    - Background Sync API 브라우저 지원 제한적
    - 오프라인 ↔ 온라인 충돌 해결 로직 복잡