초기 커밋
This commit is contained in:
137
ZELLYY/zellyy subscription/data_model.md
Normal file
137
ZELLYY/zellyy subscription/data_model.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# Subscription Manager - 데이터 모델
|
||||
|
||||
## 개요
|
||||
이 문서는 Subscription Manager 앱의 데이터 구조를 정의합니다. 앱은 로컬 저장소(SQLite)를 사용하여 사용자의 구독 정보와 설정을 저장합니다.
|
||||
|
||||
## 데이터베이스 스키마
|
||||
|
||||
### 1. Subscription (구독)
|
||||
사용자가 등록한 구독 서비스 정보를 저장합니다.
|
||||
|
||||
```
|
||||
Table: subscriptions
|
||||
- id: INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
- name: TEXT NOT NULL // 서비스 이름
|
||||
- description: TEXT // 서비스 설명
|
||||
- amount: REAL NOT NULL // 구독 비용
|
||||
- currency: TEXT NOT NULL // 통화 (USD, KRW 등)
|
||||
- billing_cycle: TEXT NOT NULL // 결제 주기 (monthly, yearly, weekly, custom)
|
||||
- cycle_days: INTEGER // custom 주기일 경우 일수
|
||||
- start_date: TEXT NOT NULL // 구독 시작일 (ISO 8601 형식)
|
||||
- next_billing_date: TEXT NOT NULL // 다음 결제일 (ISO 8601 형식)
|
||||
- category_id: INTEGER // 카테고리 외래 키
|
||||
- logo_path: TEXT // 로고 이미지 경로
|
||||
- color: TEXT // 서비스 대표 색상 (HEX)
|
||||
- reminder_days: INTEGER // 결제일 몇 일 전에 알림을 받을지
|
||||
- notes: TEXT // 사용자 메모
|
||||
- is_active: INTEGER NOT NULL DEFAULT 1 // 활성 상태 (1: 활성, 0: 비활성)
|
||||
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
|
||||
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
|
||||
- FOREIGN KEY (category_id) REFERENCES categories(id)
|
||||
```
|
||||
|
||||
### 2. Category (카테고리)
|
||||
구독 서비스의 카테고리 정보를 저장합니다.
|
||||
|
||||
```
|
||||
Table: categories
|
||||
- id: INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
- name: TEXT NOT NULL // 카테고리 이름
|
||||
- icon: TEXT // 카테고리 아이콘 코드
|
||||
- color: TEXT // 카테고리 색상 (HEX)
|
||||
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
|
||||
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
|
||||
```
|
||||
|
||||
### 3. Payment (결제 내역)
|
||||
구독 서비스의 결제 내역을 저장합니다.
|
||||
|
||||
```
|
||||
Table: payments
|
||||
- id: INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
- subscription_id: INTEGER NOT NULL // 구독 외래 키
|
||||
- amount: REAL NOT NULL // 결제 금액
|
||||
- currency: TEXT NOT NULL // 통화
|
||||
- payment_date: TEXT NOT NULL // 결제일 (ISO 8601 형식)
|
||||
- status: TEXT NOT NULL // 상태 (paid, pending, failed)
|
||||
- notes: TEXT // 메모
|
||||
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
|
||||
- FOREIGN KEY (subscription_id) REFERENCES subscriptions(id)
|
||||
```
|
||||
|
||||
### 4. Usage (사용량)
|
||||
구독 서비스의 사용량 정보를 저장합니다.
|
||||
|
||||
```
|
||||
Table: usages
|
||||
- id: INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
- subscription_id: INTEGER NOT NULL // 구독 외래 키
|
||||
- date: TEXT NOT NULL // 사용일 (ISO 8601 형식)
|
||||
- amount: REAL // 사용량 (서비스에 따라 다름)
|
||||
- unit: TEXT // 단위 (API 호출, 토큰, 시간 등)
|
||||
- notes: TEXT // 메모
|
||||
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
|
||||
- FOREIGN KEY (subscription_id) REFERENCES subscriptions(id)
|
||||
```
|
||||
|
||||
### 5. Settings (설정)
|
||||
앱 설정 정보를 저장합니다.
|
||||
|
||||
```
|
||||
Table: settings
|
||||
- id: INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
- key: TEXT NOT NULL UNIQUE // 설정 키
|
||||
- value: TEXT NOT NULL // 설정 값
|
||||
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
|
||||
```
|
||||
|
||||
### 6. PredefinedService (미리 정의된 서비스)
|
||||
앱에서 기본적으로 제공하는 서비스 정보를 저장합니다.
|
||||
|
||||
```
|
||||
Table: predefined_services
|
||||
- id: INTEGER PRIMARY KEY AUTOINCREMENT
|
||||
- name: TEXT NOT NULL // 서비스 이름
|
||||
- description: TEXT // 서비스 설명
|
||||
- logo_path: TEXT // 로고 이미지 경로
|
||||
- color: TEXT // 서비스 대표 색상 (HEX)
|
||||
- category_id: INTEGER // 기본 카테고리
|
||||
- website: TEXT // 서비스 웹사이트
|
||||
- created_at: TEXT NOT NULL // 생성일 (ISO 8601 형식)
|
||||
- updated_at: TEXT NOT NULL // 수정일 (ISO 8601 형식)
|
||||
- FOREIGN KEY (category_id) REFERENCES categories(id)
|
||||
```
|
||||
|
||||
## 초기 데이터
|
||||
|
||||
### 기본 카테고리
|
||||
- AI 서비스
|
||||
- 개발 도구
|
||||
- 엔터테인먼트
|
||||
- 생산성
|
||||
- 클라우드 스토리지
|
||||
- 기타
|
||||
|
||||
### 미리 정의된 서비스
|
||||
- OpenAI (ChatGPT, DALL-E)
|
||||
- Anthropic (Claude)
|
||||
- GitHub (GitHub Copilot)
|
||||
- Cursor
|
||||
- Windsurf
|
||||
- 기타 인기 구독 서비스
|
||||
|
||||
## 데이터 관계
|
||||
- 하나의 구독은 하나의 카테고리에 속합니다.
|
||||
- 하나의 구독은 여러 결제 내역을 가질 수 있습니다.
|
||||
- 하나의 구독은 여러 사용량 기록을 가질 수 있습니다.
|
||||
|
||||
## 데이터 마이그레이션
|
||||
앱 업데이트 시 데이터베이스 스키마 변경이 필요한 경우, 마이그레이션 스크립트를 통해 기존 데이터를 보존하면서 스키마를 업데이트합니다.
|
||||
|
||||
## 데이터 백업
|
||||
사용자가 앱을 재설치하거나 기기를 변경할 때 데이터 손실을 방지하기 위해, 로컬 백업 기능을 제공합니다. 향후 클라우드 동기화 기능이 추가될 예정입니다.
|
||||
|
||||
## 데이터 보안
|
||||
- 민감한 결제 정보는 기기의 보안 저장소에 암호화하여 저장합니다.
|
||||
- 앱 잠금 기능을 통해 무단 접근을 방지합니다.
|
||||
- 백업 파일은 암호화됩니다.
|
||||
Reference in New Issue
Block a user