@kiyeonjeon21/datacontext 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/adapters/sqlite.d.ts.map +1 -1
  2. package/dist/adapters/sqlite.js +13 -0
  3. package/dist/adapters/sqlite.js.map +1 -1
  4. package/dist/api/server.d.ts.map +1 -1
  5. package/dist/api/server.js +115 -0
  6. package/dist/api/server.js.map +1 -1
  7. package/dist/cli/index.js +58 -14
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/core/context-service.d.ts +63 -0
  10. package/dist/core/context-service.d.ts.map +1 -1
  11. package/dist/core/context-service.js +66 -0
  12. package/dist/core/context-service.js.map +1 -1
  13. package/dist/core/harvester.d.ts +57 -5
  14. package/dist/core/harvester.d.ts.map +1 -1
  15. package/dist/core/harvester.js +86 -6
  16. package/dist/core/harvester.js.map +1 -1
  17. package/dist/core/types.d.ts +21 -5
  18. package/dist/core/types.d.ts.map +1 -1
  19. package/dist/index.d.ts +2 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +9 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/knowledge/store.d.ts +186 -3
  24. package/dist/knowledge/store.d.ts.map +1 -1
  25. package/dist/knowledge/store.js +389 -5
  26. package/dist/knowledge/store.js.map +1 -1
  27. package/dist/knowledge/types.d.ts +252 -4
  28. package/dist/knowledge/types.d.ts.map +1 -1
  29. package/dist/knowledge/types.js +138 -1
  30. package/dist/knowledge/types.js.map +1 -1
  31. package/dist/mcp/tools.d.ts.map +1 -1
  32. package/dist/mcp/tools.js +231 -3
  33. package/dist/mcp/tools.js.map +1 -1
  34. package/docs/KNOWLEDGE_GRAPH.md +540 -0
  35. package/docs/KNOWLEDGE_TYPES.md +261 -0
  36. package/docs/MULTI_DB_ARCHITECTURE.md +319 -0
  37. package/package.json +1 -1
  38. package/scripts/create-sqlite-testdb.sh +75 -0
  39. package/scripts/test-databases.sh +324 -0
  40. package/sqlite:./test-sqlite.db +0 -0
  41. package/src/adapters/sqlite.ts +16 -0
  42. package/src/api/server.ts +134 -0
  43. package/src/cli/index.ts +57 -16
  44. package/src/core/context-service.ts +70 -0
  45. package/src/core/harvester.ts +120 -8
  46. package/src/core/types.ts +21 -5
  47. package/src/index.ts +19 -1
  48. package/src/knowledge/store.ts +480 -6
  49. package/src/knowledge/types.ts +321 -4
  50. package/src/mcp/tools.ts +273 -3
  51. package/test-sqlite.db +0 -0
  52. package/tests/knowledge-store.test.ts +130 -0
@@ -0,0 +1,261 @@
1
+ # Knowledge Types Guide
2
+
3
+ > DataContext의 지식 유형 정리 및 사용 가이드
4
+
5
+ ## Overview
6
+
7
+ DataContext는 4가지 유형의 지식을 관리합니다:
8
+
9
+ | 유형 | 목적 | 자동 적용 | AI 참조 |
10
+ |------|------|:--------:|:-------:|
11
+ | **Table Description** | 테이블/컬럼 설명 | ❌ | ✅ |
12
+ | **Business Glossary** | 용어 → SQL 번역 | ❌ | ✅ |
13
+ | **Business Rule** | 자동 적용 필터 | ✅ | ✅ |
14
+ | **Query Example** | 검증된 SQL 패턴 | ❌ | ✅ |
15
+
16
+ ---
17
+
18
+ ## 1. Table Description (테이블 설명)
19
+
20
+ **목적:** 테이블과 컬럼의 비즈니스 의미 설명
21
+
22
+ **사용 시점:** AI가 스키마를 이해할 때
23
+
24
+ **예시:**
25
+ ```yaml
26
+ table: users
27
+ description: "고객 계정 정보를 저장하는 테이블"
28
+ columns:
29
+ - name: status
30
+ description: "계정 상태 (0=비활성, 1=활성, 2=정지)"
31
+ - name: created_at
32
+ description: "계정 생성 일시"
33
+ ```
34
+
35
+ **관리 방법:**
36
+ - `datacontext harvest` - DB 코멘트에서 자동 수집
37
+ - `datacontext describe` - 수동 추가/수정
38
+
39
+ ---
40
+
41
+ ## 2. Business Glossary (용어 사전) ⭐
42
+
43
+ **목적:** 도메인 용어를 SQL 조건으로 번역
44
+
45
+ **사용 시점:** AI가 자연어 쿼리를 SQL로 변환할 때
46
+
47
+ **핵심 특징:**
48
+ - **선택적 적용** - AI가 컨텍스트에 맞게 판단
49
+ - **번역 도우미** - "활성 사용자"라고 하면 AI가 `status = 1` 사용
50
+ - **동의어 지원** - "active user", "활성화된 사용자" 모두 같은 의미
51
+
52
+ **예시:**
53
+ ```yaml
54
+ term: "활성 사용자"
55
+ synonyms: ["active user", "활성화된 사용자"]
56
+ definition: "status 컬럼이 1인 사용자"
57
+ sqlExpression: "status = 1"
58
+ appliesTo:
59
+ tables: ["users"]
60
+ category: status
61
+ ```
62
+
63
+ **사용 시나리오:**
64
+ ```
65
+ 사용자: "활성 사용자 목록 보여줘"
66
+ AI: SELECT * FROM users WHERE status = 1; -- Glossary 참조
67
+ ```
68
+
69
+ **관리 방법:**
70
+ - `datacontext glossary add "활성 사용자" "status가 1인 사용자" --sql "status = 1"`
71
+ - `datacontext glossary generate "활성=status 1, VIP=주문 10건 이상"`
72
+
73
+ ---
74
+
75
+ ## 3. Business Rule (비즈니스 룰) ⚠️
76
+
77
+ **목적:** 모든 쿼리에 자동으로 적용되는 필터/제약
78
+
79
+ **사용 시점:** 쿼리 실행 전 시스템이 자동 적용
80
+
81
+ **핵심 특징:**
82
+ - **강제 적용** - 사용자가 명시하지 않아도 항상 추가
83
+ - **보안/무결성** - Soft delete, Tenant isolation 등
84
+ - **우선순위** - 여러 룰이 있으면 priority 순으로 적용
85
+
86
+ **예시:**
87
+ ```yaml
88
+ name: "soft_delete_filter"
89
+ description: "삭제된 레코드 제외 (deleted_at IS NULL)"
90
+ condition: "deleted_at IS NULL"
91
+ appliesTo:
92
+ tables: ["users", "orders", "products"]
93
+ isActive: true
94
+ priority: 100
95
+ ```
96
+
97
+ **사용 시나리오:**
98
+ ```
99
+ 사용자: "SELECT * FROM users"
100
+ 시스템 적용 후: "SELECT * FROM users WHERE deleted_at IS NULL"
101
+ ```
102
+
103
+ **관리 방법:**
104
+ - VS Code: `DataContext: Add Business Rule`
105
+ - CLI: 현재 미구현 (향후 추가)
106
+
107
+ ---
108
+
109
+ ## 4. Query Example (쿼리 예시)
110
+
111
+ **목적:** 검증된 SQL 패턴 저장
112
+
113
+ **사용 시점:** AI가 유사한 쿼리 생성 시 참조
114
+
115
+ **예시:**
116
+ ```yaml
117
+ intent: "최근 30일 주문 총액 조회"
118
+ sql: |
119
+ SELECT
120
+ user_id,
121
+ SUM(total_amount) as total_spent
122
+ FROM orders
123
+ WHERE created_at >= CURRENT_DATE - INTERVAL '30 days'
124
+ GROUP BY user_id
125
+ tables: ["orders"]
126
+ isVerified: true
127
+ ```
128
+
129
+ **관리 방법:**
130
+ - VS Code: `DataContext: Add Query Example`
131
+ - 피드백에서 자동 생성 (성공한 쿼리)
132
+
133
+ ---
134
+
135
+ ## Glossary vs Rule: 언제 무엇을 사용?
136
+
137
+ ### Glossary 사용 (용어 번역)
138
+
139
+ ✅ 도메인 특화 용어가 있을 때
140
+ ✅ 사용자가 자연어로 요청할 때
141
+ ✅ 같은 개념에 여러 표현이 있을 때
142
+
143
+ **예시:**
144
+ - "활성 사용자", "VIP 고객", "최근 주문"
145
+ - 마케팅 용어, 비즈니스 지표
146
+
147
+ ### Rule 사용 (자동 적용 필터)
148
+
149
+ ✅ 항상 적용해야 하는 조건
150
+ ✅ 보안/무결성 관련
151
+ ✅ 사용자가 잊어버려도 적용되어야 함
152
+
153
+ **예시:**
154
+ - Soft delete 필터 (`deleted_at IS NULL`)
155
+ - Tenant isolation (`tenant_id = ?`)
156
+ - 권한 기반 필터 (`is_public = true OR owner_id = ?`)
157
+
158
+ ---
159
+
160
+ ## 스케일 대응 전략
161
+
162
+ ### 테이블이 많아질 때
163
+
164
+ 1. **태그로 그룹화**
165
+ ```yaml
166
+ table: user_preferences
167
+ tags: ["user", "settings"]
168
+ ```
169
+
170
+ 2. **스키마별 분리**
171
+ ```
172
+ knowledge/
173
+ ├── public/ # public schema
174
+ ├── analytics/ # analytics schema
175
+ └── admin/ # admin schema
176
+ ```
177
+
178
+ ### DB가 여러 개일 때
179
+
180
+ 1. **DB별 Knowledge 분리**
181
+ ```
182
+ .datacontext/
183
+ ├── users-db/
184
+ │ └── knowledge.json
185
+ ├── orders-db/
186
+ │ └── knowledge.json
187
+ └── analytics-db/
188
+ └── knowledge.json
189
+ ```
190
+
191
+ 2. **Cross-DB Glossary**
192
+ ```yaml
193
+ term: "고객"
194
+ appliesTo:
195
+ databases:
196
+ - name: users-db
197
+ tables: ["users"]
198
+ - name: orders-db
199
+ tables: ["customers"]
200
+ ```
201
+
202
+ ### 용어가 많아질 때
203
+
204
+ 1. **카테고리 활용**
205
+ - `status`: 상태 관련 (활성, 비활성, 정지)
206
+ - `time`: 시간 관련 (최근, 이번달, 지난주)
207
+ - `money`: 금액 관련 (매출, 비용, 이익)
208
+ - `entity`: 엔티티 타입 (고객, 상품, 주문)
209
+ - `metric`: 지표 (전환율, 이탈률)
210
+
211
+ 2. **검색 및 자동완성**
212
+ ```bash
213
+ datacontext glossary search "사용자"
214
+ # → 활성 사용자, 신규 사용자, VIP 사용자, ...
215
+ ```
216
+
217
+ ---
218
+
219
+ ## 권장 워크플로우
220
+
221
+ ### 1단계: 기본 설정 (처음 연결 시)
222
+
223
+ ```bash
224
+ # DB 메타데이터 수집
225
+ datacontext harvest
226
+
227
+ # 기본 Soft Delete 룰 추가 (해당되는 경우)
228
+ # VS Code: DataContext: Add Business Rule
229
+ ```
230
+
231
+ ### 2단계: 도메인 용어 추가 (점진적)
232
+
233
+ ```bash
234
+ # 자주 사용하는 용어부터
235
+ datacontext glossary add "활성 사용자" "status가 1인 사용자" --sql "status = 1"
236
+ datacontext glossary add "최근 주문" "30일 이내 주문" --sql "created_at > now() - interval '30 days'"
237
+
238
+ # 또는 AI로 일괄 생성
239
+ datacontext glossary generate "활성=status 1, VIP=order 10건 이상, 신규=created_at 7일 이내"
240
+ ```
241
+
242
+ ### 3단계: 사용하면서 개선
243
+
244
+ ```bash
245
+ # 쿼리 피드백 기록 (자동)
246
+ # 자주 수정되는 패턴 → Rule 또는 Glossary 추가
247
+
248
+ # 성공한 쿼리 → Query Example로 저장
249
+ ```
250
+
251
+ ---
252
+
253
+ ## 요약
254
+
255
+ | 질문 | 답 |
256
+ |------|-----|
257
+ | "AI가 용어를 이해하게 하고 싶다" | → **Glossary** |
258
+ | "모든 쿼리에 조건을 자동 추가하고 싶다" | → **Rule** |
259
+ | "테이블 의미를 설명하고 싶다" | → **Table Description** |
260
+ | "좋은 쿼리 패턴을 저장하고 싶다" | → **Query Example** |
261
+
@@ -0,0 +1,319 @@
1
+ # Multi-Database Architecture
2
+
3
+ > DataContext의 다중 데이터베이스 지원 아키텍처 설계
4
+
5
+ ## 현재 상태
6
+
7
+ 현재 DataContext는 **단일 연결 기반** 으로 동작합니다:
8
+
9
+ ```
10
+ ┌─────────────────────────────────────────┐
11
+ │ VS Code Extension │
12
+ ├─────────────────────────────────────────┤
13
+ │ ⭐ Active Connection │
14
+ │ └── REST API (localhost:3000) │
15
+ │ └── PostgreSQL (users-db) │
16
+ │ │
17
+ │ Connection 2 │
18
+ │ └── REST API (localhost:3001) │
19
+ │ └── MySQL (orders-db) │
20
+ └─────────────────────────────────────────┘
21
+ ```
22
+
23
+ - 각 연결은 독립적인 REST API 서버
24
+ - Knowledge는 DB별로 분리 저장 (`~/.datacontext/{db-id}/`)
25
+ - 한 번에 하나의 Active Connection만 사용
26
+
27
+ ---
28
+
29
+ ## 다중 DB 지원 전략
30
+
31
+ ### Level 1: Multi-Connection UI (현재 완료 ✅)
32
+
33
+ 여러 연결을 저장하고 전환하는 기능:
34
+
35
+ ```
36
+ Features:
37
+ ✅ 여러 연결 저장
38
+ ✅ Active Connection 표시 (⭐)
39
+ ✅ 클릭으로 연결 전환
40
+ ✅ 연결 삭제/정리
41
+ ```
42
+
43
+ **한계:** 한 번에 하나의 DB만 조회 가능
44
+
45
+ ---
46
+
47
+ ### Level 2: Unified Knowledge Layer (다음 단계)
48
+
49
+ 여러 DB의 Knowledge를 통합하여 관리:
50
+
51
+ ```
52
+ ┌─────────────────────────────────────────┐
53
+ │ Unified Knowledge Layer │
54
+ ├─────────────────────────────────────────┤
55
+ │ │
56
+ │ Business Glossary │
57
+ │ ├── "고객" → users-db.users │
58
+ │ │ orders-db.customers │
59
+ │ │ │
60
+ │ ├── "VIP" → orders-db.customers │
61
+ │ │ WHERE total_orders >= 10 │
62
+ │ │ │
63
+ │ └── "매출" → orders-db.orders │
64
+ │ SUM(total_amount) │
65
+ │ │
66
+ │ Cross-DB Mappings │
67
+ │ └── users-db.users.id │
68
+ │ = orders-db.customers.user_id │
69
+ │ │
70
+ └─────────────────────────────────────────┘
71
+ ```
72
+
73
+ **구현 방법:**
74
+
75
+ 1. **Global Knowledge Store**
76
+ ```typescript
77
+ interface GlobalKnowledge {
78
+ databases: DatabaseKnowledge[];
79
+ crossDbMappings: CrossDbMapping[];
80
+ globalGlossary: BusinessTerm[];
81
+ }
82
+
83
+ interface CrossDbMapping {
84
+ source: { db: string; table: string; column: string };
85
+ target: { db: string; table: string; column: string };
86
+ relationship: 'equals' | 'foreign_key';
87
+ }
88
+ ```
89
+
90
+ 2. **Term Scope 확장**
91
+ ```typescript
92
+ interface BusinessTerm {
93
+ term: string;
94
+ definition: string;
95
+ appliesTo: {
96
+ databases?: string[]; // 추가
97
+ tables?: string[];
98
+ columns?: string[];
99
+ };
100
+ }
101
+ ```
102
+
103
+ 3. **AI Context 확장**
104
+ ```typescript
105
+ // 현재: 단일 DB 컨텍스트
106
+ buildContext(query, tables)
107
+
108
+ // 미래: 다중 DB 컨텍스트
109
+ buildCrossDbContext(query, {
110
+ databases: ['users-db', 'orders-db'],
111
+ tables: ['users', 'orders', 'customers']
112
+ })
113
+ ```
114
+
115
+ ---
116
+
117
+ ### Level 3: Federated Query (고급)
118
+
119
+ 여러 DB를 하나의 쿼리로 조회:
120
+
121
+ ```sql
122
+ -- 사용자가 원하는 것
123
+ SELECT u.name, SUM(o.total_amount) as revenue
124
+ FROM users u
125
+ JOIN orders o ON u.id = o.user_id
126
+ GROUP BY u.name
127
+
128
+ -- 실제 실행 (DB가 다를 때)
129
+ -- Step 1: users-db에서 사용자 조회
130
+ -- Step 2: orders-db에서 주문 조회
131
+ -- Step 3: 결과 조인 (클라이언트)
132
+ ```
133
+
134
+ **구현 복잡도:** 매우 높음
135
+
136
+ **필요 기능:**
137
+ - Query Planner (DB별 쿼리 분리)
138
+ - Result Merger (클라이언트 조인)
139
+ - Type Mapping (DB간 타입 호환)
140
+ - Performance Optimization (병렬 실행)
141
+
142
+ **대안:**
143
+ - ETL + Data Warehouse (Snowflake, BigQuery)
144
+ - Trino/Presto (분산 쿼리 엔진)
145
+ - dbt (데이터 변환)
146
+
147
+ ---
148
+
149
+ ## 권장 구현 순서
150
+
151
+ ### Phase 1: Multi-Connection 개선 (현재)
152
+
153
+ ```
154
+ ✅ 연결 저장/전환
155
+ ✅ Active Connection UI
156
+ ⏳ 연결 그룹화 (개발/스테이징/프로덕션)
157
+ ⏳ 연결 복사/공유
158
+ ```
159
+
160
+ ### Phase 2: Unified Knowledge (다음)
161
+
162
+ ```
163
+ ⏳ Cross-DB Term 지원
164
+ ⏳ Global Glossary
165
+ ⏳ DB 간 테이블 매핑
166
+ ⏳ 통합 검색
167
+ ```
168
+
169
+ ### Phase 3: Enhanced Query (미래)
170
+
171
+ ```
172
+ ⏳ Multi-DB 컨텍스트 인식
173
+ ⏳ 자동 DB 선택 (용어 기반)
174
+ ⏳ 기본 Cross-DB 조인 제안
175
+ ```
176
+
177
+ ### Phase 4: Federation (선택적)
178
+
179
+ ```
180
+ ⏳ 간단한 Cross-DB 쿼리
181
+ ⏳ 결과 병합
182
+ ⏳ Trino/Presto 통합 (외부)
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Knowledge 저장 구조
188
+
189
+ ### 현재 (DB별 분리)
190
+
191
+ ```
192
+ ~/.datacontext/
193
+ ├── localhost_users_db/
194
+ │ └── knowledge.json
195
+ ├── localhost_orders_db/
196
+ │ └── knowledge.json
197
+ └── localhost_analytics_db/
198
+ └── knowledge.json
199
+ ```
200
+
201
+ ### 제안 (계층적 구조)
202
+
203
+ ```
204
+ ~/.datacontext/
205
+ ├── global/
206
+ │ ├── settings.json
207
+ │ ├── glossary.json # 전역 용어
208
+ │ └── mappings.json # DB 간 매핑
209
+ ├── workspaces/
210
+ │ └── my-project/
211
+ │ ├── workspace.json # 프로젝트 설정
212
+ │ └── connections.json # 연결 목록
213
+ └── databases/
214
+ ├── users-db/
215
+ │ └── knowledge.json
216
+ ├── orders-db/
217
+ │ └── knowledge.json
218
+ └── analytics-db/
219
+ └── knowledge.json
220
+ ```
221
+
222
+ ---
223
+
224
+ ## Glossary 스케일 대응
225
+
226
+ ### 문제: 용어가 많아지면?
227
+
228
+ ```
229
+ 현재: 50개 용어 → 검색 O
230
+ 미래: 500개 용어 → 검색 어려움
231
+ 5000개 용어 → 관리 불가
232
+ ```
233
+
234
+ ### 해결책
235
+
236
+ 1. **카테고리 필터링**
237
+ ```
238
+ ┌─ Business Glossary ──────────────┐
239
+ │ [Filter: 상태 ▼] [Search: ___] │
240
+ │ │
241
+ │ 📁 상태 (12) │
242
+ │ ├── 활성 사용자 │
243
+ │ ├── 휴면 계정 │
244
+ │ └── 정지 계정 │
245
+ │ │
246
+ │ 📁 시간 (8) │
247
+ │ ├── 최근 주문 │
248
+ │ └── 이번달 가입 │
249
+ └──────────────────────────────────┘
250
+ ```
251
+
252
+ 2. **Table 연결 기반 필터**
253
+ ```
254
+ 현재 쿼리: SELECT * FROM users WHERE ...
255
+
256
+ 관련 용어만 표시:
257
+ ├── 활성 사용자 (users.status = 1)
258
+ ├── VIP 고객 (users.tier = 'vip')
259
+ └── 신규 가입자 (users.created_at > ...)
260
+ ```
261
+
262
+ 3. **AI 기반 용어 추천**
263
+ ```
264
+ 쿼리: "이번달 매출 높은 고객"
265
+
266
+ 추천 용어:
267
+ ✓ 이번달 (created_at >= month_start)
268
+ ✓ 매출 (SUM(total_amount))
269
+ ✓ 고객 (users JOIN orders)
270
+ ```
271
+
272
+ 4. **버전 관리**
273
+ ```yaml
274
+ # glossary.yaml
275
+ version: 2
276
+ updated_at: 2025-01-01
277
+ terms:
278
+ - term: "활성 사용자"
279
+ version: 3
280
+ history:
281
+ - v1: status = 'active'
282
+ - v2: status = 1
283
+ - v3: status = 1 AND last_login > now() - interval '30 days'
284
+ ```
285
+
286
+ ---
287
+
288
+ ## 결론
289
+
290
+ ### 현재 우선순위
291
+
292
+ 1. **Phase 1 완료** ✅
293
+ - Multi-Connection UI
294
+ - SQLite/MySQL/PostgreSQL 테스트
295
+
296
+ 2. **Phase 2 준비**
297
+ - Global Glossary 설계
298
+ - Cross-DB Mapping 정의
299
+ - 카테고리 필터 UI
300
+
301
+ 3. **Phase 3+ 유보**
302
+ - Federated Query는 복잡도가 높음
303
+ - 사용자 피드백 후 결정
304
+
305
+ ### 핵심 원칙
306
+
307
+ 1. **점진적 복잡도 증가**
308
+ - 단순한 것부터 시작
309
+ - 사용자 요구에 따라 확장
310
+
311
+ 2. **독립성 유지**
312
+ - 각 DB의 Knowledge는 독립적
313
+ - 전역 레이어는 옵션
314
+
315
+ 3. **AI 활용**
316
+ - 용어 추천/자동완성
317
+ - 컨텍스트 기반 필터링
318
+ - Cross-DB 관계 추론
319
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kiyeonjeon21/datacontext",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "AI-native database context layer - Make AI understand your data better",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,75 @@
1
+ #!/bin/bash
2
+ # Create SQLite test database with sample data
3
+
4
+ set -e
5
+
6
+ DB_PATH="${1:-./test-sqlite.db}"
7
+
8
+ echo "Creating SQLite test database at: $DB_PATH"
9
+
10
+ # Remove existing
11
+ rm -f "$DB_PATH"
12
+
13
+ # Create database and tables
14
+ sqlite3 "$DB_PATH" << 'EOF'
15
+ -- Users table
16
+ CREATE TABLE users (
17
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
18
+ name TEXT NOT NULL,
19
+ email TEXT UNIQUE NOT NULL,
20
+ status INTEGER DEFAULT 1,
21
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
22
+ deleted_at DATETIME
23
+ );
24
+
25
+ -- Products table
26
+ CREATE TABLE products (
27
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
28
+ name TEXT NOT NULL,
29
+ price REAL NOT NULL,
30
+ inventory INTEGER DEFAULT 0,
31
+ category TEXT,
32
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
33
+ );
34
+
35
+ -- Orders table
36
+ CREATE TABLE orders (
37
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
38
+ user_id INTEGER REFERENCES users(id),
39
+ product_id INTEGER REFERENCES products(id),
40
+ quantity INTEGER NOT NULL,
41
+ total_amount REAL NOT NULL,
42
+ status TEXT DEFAULT 'pending',
43
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP
44
+ );
45
+
46
+ -- Insert sample data
47
+ INSERT INTO users (name, email, status) VALUES
48
+ ('Alice', 'alice@example.com', 1),
49
+ ('Bob', 'bob@example.com', 1),
50
+ ('Charlie', 'charlie@example.com', 0),
51
+ ('Diana', 'diana@example.com', 2);
52
+
53
+ INSERT INTO products (name, price, inventory, category) VALUES
54
+ ('Laptop', 999.99, 50, 'electronics'),
55
+ ('Mouse', 29.99, 200, 'electronics'),
56
+ ('Keyboard', 79.99, 100, 'electronics'),
57
+ ('Desk Chair', 299.99, 30, 'furniture');
58
+
59
+ INSERT INTO orders (user_id, product_id, quantity, total_amount, status) VALUES
60
+ (1, 1, 1, 999.99, 'delivered'),
61
+ (1, 2, 2, 59.98, 'delivered'),
62
+ (2, 3, 1, 79.99, 'shipped'),
63
+ (2, 4, 1, 299.99, 'pending');
64
+
65
+ SELECT 'SQLite test database created!' as result;
66
+ .tables
67
+ EOF
68
+
69
+ echo ""
70
+ echo "Database created: $DB_PATH"
71
+ echo ""
72
+ echo "To start DataContext server:"
73
+ echo " npx @kiyeonjeon21/datacontext serve sqlite:$DB_PATH --port 3000"
74
+ echo ""
75
+