어떤 기능인가요?
오프라인 캐시(타이머·운동 기록)의 바탕이 되는 Room 골격을 올립니다. Entity와 화면은 없고, 데이터베이스와 세션 정리 연결까지만 합니다.
- Room 의존성은 이미 걸려 있습니다 (
data/build.gradle.kts의 room-runtime, room-ktx, ksp compiler). 이 이슈는 UndabangDatabase 골격과 배선만 추가합니다 - 계정 경계를 테이블보다 먼저 잠급니다. 로그아웃이나 계정 전환 때 이전 사용자의 데이터가 남으면 안 됩니다
- 세션을 지우는 경로는 두 갈래입니다.
MainViewModel.transitionToLogin()(강제 로그아웃·invalid_grant·회원ID 게이트)과 SettingFragment의 clearLocalSession(). 둘 다 ClearSessionUseCase를 거치므로 삭제를 여기 한 곳에 연결합니다 - domain은 Room을 모르게 합니다.
FcmTokenSyncScheduler와 같은 패턴으로 domain에 SessionDataCleaner 인터페이스를 두고 data 구현이 지웁니다
테이블 규칙을 이 이슈에서 정합니다: 모든 테이블에 memberId 컬럼을 두고 조회에 계정 조건을 겁니다. 적용은 첫 Entity가 생기는 후속 이슈(운동 기록·타이머)부터입니다.
이 이슈만으로는 화면에 보이는 변화가 없습니다. Entity와 DAO, 캐시 표시는 후속 이슈에서 다룹니다.
작업 상세 내용
참고할만한 자료(선택)
오프라인 1단계 디자인 문서의 로컬 저장 방식(Room 채택)과 위험 요소 1(계정 전환 시 이전 사용자 데이터 노출) 기준입니다. #562 후속.
어떤 기능인가요?
오프라인 캐시(타이머·운동 기록)의 바탕이 되는 Room 골격을 올립니다. Entity와 화면은 없고, 데이터베이스와 세션 정리 연결까지만 합니다.
data/build.gradle.kts의 room-runtime, room-ktx, ksp compiler). 이 이슈는UndabangDatabase골격과 배선만 추가합니다MainViewModel.transitionToLogin()(강제 로그아웃·invalid_grant·회원ID 게이트)과SettingFragment의clearLocalSession(). 둘 다ClearSessionUseCase를 거치므로 삭제를 여기 한 곳에 연결합니다FcmTokenSyncScheduler와 같은 패턴으로 domain에SessionDataCleaner인터페이스를 두고 data 구현이 지웁니다테이블 규칙을 이 이슈에서 정합니다: 모든 테이블에 memberId 컬럼을 두고 조회에 계정 조건을 겁니다. 적용은 첫 Entity가 생기는 후속 이슈(운동 기록·타이머)부터입니다.
이 이슈만으로는 화면에 보이는 변화가 없습니다. Entity와 DAO, 캐시 표시는 후속 이슈에서 다룹니다.
작업 상세 내용
UndabangDatabase골격 추가 (버전 1,exportSchema = true, 스키마 경로 설정)SessionDataCleaner인터페이스, data 구현이clearAllTables()호출ClearSessionUseCase가 세션 정리 시SessionDataCleaner를 부르도록 추가ClearSessionUseCaseTest에 삭제 호출 검증 추가참고할만한 자료(선택)
오프라인 1단계 디자인 문서의 로컬 저장 방식(Room 채택)과 위험 요소 1(계정 전환 시 이전 사용자 데이터 노출) 기준입니다. #562 후속.