어떤 기능인가요?
오프라인 캐시(타이머·운동 기록)의 바탕이 되는 Room 골격을 올립니다. 데이터베이스와 세션 정리 연결까지가 이 이슈의 몫입니다.
- 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 없이 데이터베이스 골격만 올릴 계획이었으나, Room이 entities가 빈 데이터베이스를 컴파일 에러로 막습니다 (@Database annotation must specify list of entities). 그래서 #583의 Entity와 DAO를 같은 PR에 담았습니다.
참고할만한 자료(선택)
오프라인 1단계 디자인 문서의 로컬 저장 방식(Room 채택)과 위험 요소 1(계정 전환 시 이전 사용자 데이터 노출) 기준입니다. #562 후속.
어떤 기능인가요?
오프라인 캐시(타이머·운동 기록)의 바탕이 되는 Room 골격을 올립니다. 데이터베이스와 세션 정리 연결까지가 이 이슈의 몫입니다.
data/build.gradle.kts의 room-runtime, room-ktx, ksp compiler). 이 이슈는UndabangDatabase골격과 배선만 추가합니다MainViewModel.transitionToLogin()(강제 로그아웃·invalid_grant·회원ID 게이트)과SettingFragment의clearLocalSession(). 둘 다ClearSessionUseCase를 거치므로 삭제를 여기 한 곳에 연결합니다FcmTokenSyncScheduler와 같은 패턴으로 domain에SessionDataCleaner인터페이스를 두고 data 구현이 지웁니다테이블 규칙을 이 이슈에서 정합니다: 모든 테이블에 memberId 컬럼을 두고 조회에 계정 조건을 겁니다.
이 이슈만으로는 화면에 보이는 변화가 없습니다.
작업 상세 내용
UndabangDatabase골격 추가 (버전 1,exportSchema = true, 스키마 경로 설정)SessionDataCleaner인터페이스, data 구현이clearAllTables()호출ClearSessionUseCase가 세션 정리 시SessionDataCleaner를 부르도록 추가ClearSessionUseCaseTest에 삭제 호출 검증 추가진행 중 변경 사항
당초에는 Entity 없이 데이터베이스 골격만 올릴 계획이었으나, Room이
entities가 빈 데이터베이스를 컴파일 에러로 막습니다 (@Database annotation must specify list of entities). 그래서 #583의 Entity와 DAO를 같은 PR에 담았습니다.참고할만한 자료(선택)
오프라인 1단계 디자인 문서의 로컬 저장 방식(Room 채택)과 위험 요소 1(계정 전환 시 이전 사용자 데이터 노출) 기준입니다. #562 후속.