# 데이터베이스 구조

## 데이터베이스 개요

이 시스템은 **두 개의 독립적인 데이터베이스**를 사용합니다:

1. **MSSQL (PM_PRES)**: 기존 POS 판매 데이터
2. **SQLite (mileage.db)**: 신규 마일리지 시스템 데이터

## MSSQL (기존 POS 데이터)

### 1. SALE_MAIN (판매 헤더)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| SL_NO_order | VARCHAR(20) | 주문번호 (PK) |
| SL_DT_appl | VARCHAR(8) | 판매일자 (YYYYMMDD) |
| SL_NM_custom | VARCHAR(50) | 고객명 |
| SL_CD_custom | VARCHAR(10) | 고객코드 |
| SL_MY_total | DECIMAL | 총 매출액 |
| SL_MY_sale | DECIMAL | 실 판매액 |
| InsertTime | DATETIME | 등록시간 |

### 2. SALE_SUB (판매 상세)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| SL_NO_order | VARCHAR(20) | 주문번호 (FK) |
| DrugCode | VARCHAR(20) | 약품코드 |
| SL_NM_item | INT | 수량 |
| SL_TOTAL_PRICE | DECIMAL | 판매가 |

### 3. CD_PERSON (고객 정보)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| CUSCODE | VARCHAR(10) | 고객코드 (PK) |
| PANAME | VARCHAR(20) | 고객명 |
| PHONE | VARCHAR(20) | 휴대폰 |

## SQLite (신규 마일리지 데이터)

### 1. users (카카오 계정)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| id | INTEGER | PK |
| nickname | VARCHAR(100) | 닉네임 |
| email | VARCHAR(200) | 이메일 |
| phone | VARCHAR(20) | 전화번호 |
| mileage_balance | INTEGER | 마일리지 잔액 |

### 2. customer_identities (외부 로그인)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| id | INTEGER | PK |
| user_id | INTEGER | FK → users.id |
| provider | VARCHAR(20) | 'kakao' |
| provider_user_id | VARCHAR(100) | 카카오 user id |

### 3. claim_tokens (QR 토큰)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| id | INTEGER | PK |
| transaction_id | VARCHAR(20) | SALE_MAIN.SL_NO_order |
| token_hash | VARCHAR(64) | SHA256 해시 |
| claimable_points | INTEGER | 적립 가능 포인트 |
| expires_at | DATETIME | 만료시간 |
| claimed_at | DATETIME | 적립 완료 시간 |
| claimed_by_user_id | INTEGER | FK → users.id |

### 4. mileage_ledger (마일리지 원장)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| id | INTEGER | PK |
| user_id | INTEGER | FK → users.id |
| transaction_id | VARCHAR(20) | SALE_MAIN.SL_NO_order |
| points | INTEGER | + 적립, - 사용 |
| balance_after | INTEGER | 거래 후 잔액 |
| reason | VARCHAR(50) | 'PURCHASE_CLAIM' 등 |

### 5. pos_customer_links (POS 고객 연결)

| 컬럼명 | 타입 | 설명 |
|--------|------|------|
| id | INTEGER | PK |
| user_id | INTEGER | FK → users.id |
| cuscode | VARCHAR(10) | CD_PERSON.CUSCODE |
| customer_name | VARCHAR(50) | 고객명 |

## 데이터 연결 구조

```
MSSQL                           SQLite
────────────────────────────    ────────────────────────────
SALE_MAIN.SL_NO_order ────────→ claim_tokens.transaction_id
                                      ↓
                                 mileage_ledger.transaction_id
                                      ↓
                                 users.id
                                      ↓
CD_PERSON.CUSCODE ─────────────→ pos_customer_links.cuscode
```

## 스키마 초기화

```bash
# SQLite 데이터베이스 생성
sqlite3 backend/db/mileage.db < backend/db/mileage_schema.sql
```
