--- name: database description: Room DB 기반 로컬 데이터 저장 - 서버/사용자/디바이스 토큰 관리 (Supporting Domain) type: supporting --- # Database ## 목적 / 책임 - Room Database를 통한 로컬 데이터 저장 - Global DB: 디바이스 토큰, 서버 목록 관리 - Server DB: 서버별 Config, User, System 데이터 관리 - DAO 쿼리 구현 및 엔티티 정의 ## 포함 경로 - `android/app/src/main/java/com/tokilabs/mattermost/db/GlobalDatabase.kt` - `android/app/src/main/java/com/tokilabs/mattermost/db/MattermostDatabase.kt` - `android/app/src/main/java/com/tokilabs/mattermost/db/GlobalEntities.kt` - `android/app/src/main/java/com/tokilabs/mattermost/db/ServerEntities.kt` - `android/app/src/main/java/com/tokilabs/mattermost/helpers/DatabaseHelper.kt` - `android/app/src/main/java/com/tokilabs/mattermost/helpers/PushNotificationDataHelper.kt` ## 제외 경로 - DB를 사용하는 다른 도메인 파일 (MattermostFirebaseMessagingService 등) ## 주요 구성 요소 - `GlobalDatabase`: 디바이스 토큰, 서버 목록 (앱 전역) - `MattermostDatabase`: 서버별 DB (Config, User, System 테이블) - `GlobalEntities`: Global DB 엔티티 + DAO 인터페이스 - `ServerEntities`: Server DB 엔티티 + DAO 인터페이스 - `DatabaseHelper`: DB 인스턴스 접근 추상화 - `PushNotificationDataHelper`: **🔴 현재 STUB** - DAO 쿼리 구현 필요 (TODO-1) ## 유지할 패턴 - GlobalDatabase / MattermostDatabase 분리 구조 유지 - DatabaseHelper를 통한 간접 접근 (직접 Room 인스턴스 접근 지양) - 서버별 DB는 서버 URL을 키로 구분 ## TODO (push-notification-todo.md 기준) - **[TODO-1] 🔴**: `PushNotificationDataHelper.kt` Room DAO 쿼리 구현 ## 다른 도메인과의 경계 - **push-notification**: 알림 데이터 조회 요청은 push-notification이 하고, 실제 쿼리는 이 도메인 - **network**: DB와 네트워크는 분리, 캐시 전략은 각 도메인이 독립 관리 ## 금지 사항 - DB 스키마 변경 시 반드시 마이그레이션 전략을 함께 고려한다. - 비즈니스 로직을 DAO에 넣지 않는다.