묵상 오프라인 저장
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월 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 브라우저 지원 제한적
- 오프라인 ↔ 온라인 충돌 해결 로직 복잡