sonamu 0.8.24 → 0.8.26

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 (88) hide show
  1. package/dist/api/__tests__/config.test.js +189 -0
  2. package/dist/api/config.d.ts.map +1 -1
  3. package/dist/api/config.js +7 -2
  4. package/dist/api/sonamu.d.ts.map +1 -1
  5. package/dist/api/sonamu.js +14 -10
  6. package/dist/auth/index.d.ts +1 -0
  7. package/dist/auth/index.d.ts.map +1 -1
  8. package/dist/auth/index.js +2 -1
  9. package/dist/auth/knex-adapter.d.ts +23 -0
  10. package/dist/auth/knex-adapter.d.ts.map +1 -0
  11. package/dist/auth/knex-adapter.js +163 -0
  12. package/dist/auth/plugins/wrappers/admin.d.ts +2 -2
  13. package/dist/bin/__tests__/ts-loader-register.test.js +45 -0
  14. package/dist/bin/cli.js +47 -9
  15. package/dist/bin/ts-loader-register.js +3 -29
  16. package/dist/bin/ts-loader-registration.d.ts +2 -0
  17. package/dist/bin/ts-loader-registration.d.ts.map +1 -0
  18. package/dist/bin/ts-loader-registration.js +42 -0
  19. package/dist/cone/cone-generator.js +3 -3
  20. package/dist/database/puri-subset.test-d.js +9 -1
  21. package/dist/database/puri-subset.types.d.ts +1 -1
  22. package/dist/database/puri-subset.types.d.ts.map +1 -1
  23. package/dist/database/puri-subset.types.js +1 -1
  24. package/dist/testing/fixture-generator.js +5 -5
  25. package/dist/ui/ai-client.js +2 -2
  26. package/dist/ui/api.d.ts.map +1 -1
  27. package/dist/ui/api.js +14 -14
  28. package/dist/ui/cdd-service.d.ts +15 -18
  29. package/dist/ui/cdd-service.d.ts.map +1 -1
  30. package/dist/ui/cdd-service.js +246 -222
  31. package/dist/ui/cdd-types.d.ts +41 -68
  32. package/dist/ui/cdd-types.d.ts.map +1 -1
  33. package/dist/ui/cdd-types.js +2 -2
  34. package/dist/ui-web/assets/index-CKo0Z2Iu.css +1 -0
  35. package/dist/ui-web/assets/{index-CxiydzeC.js → index-DK-2aacv.js} +83 -83
  36. package/dist/ui-web/index.html +2 -2
  37. package/package.json +6 -2
  38. package/src/api/__tests__/config.test.ts +225 -0
  39. package/src/api/config.ts +10 -4
  40. package/src/api/sonamu.ts +16 -13
  41. package/src/auth/index.ts +1 -0
  42. package/src/auth/knex-adapter.ts +208 -0
  43. package/src/bin/__tests__/ts-loader-register.test.ts +62 -0
  44. package/src/bin/cli.ts +52 -9
  45. package/src/bin/ts-loader-register.ts +2 -32
  46. package/src/bin/ts-loader-registration.ts +55 -0
  47. package/src/cone/cone-generator.ts +2 -2
  48. package/src/database/puri-subset.test-d.ts +102 -0
  49. package/src/database/puri-subset.types.ts +1 -1
  50. package/src/skills/commands/sonamu-skills.md +20 -0
  51. package/src/skills/sonamu/SKILL.md +179 -137
  52. package/src/skills/sonamu/ai-agents.md +69 -69
  53. package/src/skills/sonamu/api.md +147 -147
  54. package/src/skills/sonamu/auth-migration.md +220 -220
  55. package/src/skills/sonamu/auth-plugins.md +83 -83
  56. package/src/skills/sonamu/auth.md +106 -106
  57. package/src/skills/sonamu/cdd.md +65 -200
  58. package/src/skills/sonamu/cone.md +138 -138
  59. package/src/skills/sonamu/config.md +191 -191
  60. package/src/skills/sonamu/create-sonamu.md +66 -66
  61. package/src/skills/sonamu/database.md +158 -158
  62. package/src/skills/sonamu/entity-basic.md +292 -293
  63. package/src/skills/sonamu/entity-relations.md +246 -246
  64. package/src/skills/sonamu/entity-validation-checklist.md +124 -124
  65. package/src/skills/sonamu/fixture-cli.md +231 -231
  66. package/src/skills/sonamu/framework-change.md +37 -37
  67. package/src/skills/sonamu/frontend.md +223 -223
  68. package/src/skills/sonamu/i18n.md +82 -82
  69. package/src/skills/sonamu/migration.md +77 -77
  70. package/src/skills/sonamu/model.md +222 -222
  71. package/src/skills/sonamu/naite.md +86 -86
  72. package/src/skills/sonamu/project-init.md +228 -228
  73. package/src/skills/sonamu/puri.md +122 -122
  74. package/src/skills/sonamu/scaffolding.md +154 -154
  75. package/src/skills/sonamu/skill-contribution.md +124 -124
  76. package/src/skills/sonamu/subset.md +46 -46
  77. package/src/skills/sonamu/tasks.md +82 -82
  78. package/src/skills/sonamu/testing-devrunner.md +147 -147
  79. package/src/skills/sonamu/testing.md +673 -673
  80. package/src/skills/sonamu/upsert.md +79 -79
  81. package/src/skills/sonamu/vector.md +67 -67
  82. package/src/testing/fixture-generator.ts +4 -4
  83. package/src/ui/ai-client.ts +1 -1
  84. package/src/ui/api.ts +18 -17
  85. package/src/ui/cdd-service.ts +264 -254
  86. package/src/ui/cdd-types.ts +40 -75
  87. package/dist/ui-web/assets/index-BrQKU3j9.css +0 -1
  88. package/src/skills/sonamu/workflow.md +0 -317
@@ -1,74 +1,74 @@
1
1
  ---
2
2
  name: sonamu-database
3
- description: Sonamu 데이터베이스 설정, Seed Data 관리, 문제 해결. Docker 포트 충돌, DB 연결 설정. Use when database issues occur.
3
+ description: Sonamu database configuration, Seed Data management, troubleshooting. Docker port conflicts, DB connection configuration. Use when database issues occur.
4
4
  ---
5
5
 
6
- # 데이터베이스 설정
6
+ # Database Configuration
7
7
 
8
- ## Docker DB 실행
8
+ ## Starting Docker DB
9
9
 
10
10
  ```bash
11
11
  cd packages/api
12
12
  pnpm docker:up
13
13
  ```
14
14
 
15
- ## 3-Tier DB 구조
15
+ ## 3-Tier DB Structure
16
16
 
17
- Sonamu 3단계 데이터베이스 구조를 사용합니다. DB의 역할과 데이터 흐름을 이해하는 것이 중요합니다.
17
+ Sonamu uses a 3-tier database structure. It is important to understand the role of each DB and the data flow.
18
18
 
19
19
  ```
20
- production/development master (실제 DB)
20
+ production/development master (actual DB)
21
21
  ↓ (fixture fetch)
22
22
  project_fixture (fixture DB)
23
23
  ↓ (fixture sync)
24
24
  project_test (test DB)
25
25
  ```
26
26
 
27
- ### DB별 역할
27
+ ### Role of Each DB
28
28
 
29
- | DB | 용도 | 데이터 출처 | 명령어 |
30
- |----|------|-----------|--------|
31
- | `project` | 운영/개발 실제 DB | 실제 사용자 데이터 | 직접 생성 |
32
- | `project_fixture` | 테스트용 참조 데이터 저장소 | production에서 fetch 또는 gen으로 생성 | `pnpm sonamu fixture gen/fetch` |
33
- | `project_test` | 테스트 실행 환경 | fixture에서 sync | `pnpm sonamu fixture sync` |
29
+ | DB | Purpose | Data Source | Command |
30
+ |----|---------|------------|---------|
31
+ | `project` | Production/development actual DB | Real user data | Created directly |
32
+ | `project_fixture` | Reference data store for testing | Fetched from production or generated with gen | `pnpm sonamu fixture gen/fetch` |
33
+ | `project_test` | Test execution environment | Synced from fixture | `pnpm sonamu fixture sync` |
34
34
 
35
- ### 데이터 흐름
35
+ ### Data Flow
36
36
 
37
- **1. fixture fetch (실제 데이터 가져오기)**
37
+ **1. fixture fetch (fetch real data)**
38
38
  ```bash
39
39
  pnpm sonamu fixture fetch --include User --limit 10
40
40
  ```
41
41
  - production/development master → fixture DB
42
- - 실제 운영 데이터를 테스트용으로 복사
43
- - 관련 데이터(FK) 함께 가져옴
42
+ - Copies actual production data for testing
43
+ - Related data (FKs) is also fetched
44
44
 
45
- **2. fixture gen (더미 데이터 생성)**
45
+ **2. fixture gen (generate dummy data)**
46
46
  ```bash
47
47
  pnpm sonamu fixture gen --include Department --count 5
48
48
  ```
49
- - fixture DB 내부에서 faker 기반 생성
50
- - 참조 관계(FK) 자동 해결
51
- - 한국어 데이터 생성 지원
49
+ - Generated inside fixture DB using faker
50
+ - Automatically resolves reference relationships (FKs)
51
+ - Supports Korean data generation
52
52
 
53
- **3. fixture sync (테스트 DB 동기화)**
53
+ **3. fixture sync (sync test DB)**
54
54
  ```bash
55
55
  pnpm sonamu fixture sync
56
56
  ```
57
57
  - fixture DB → test DB
58
- - 테스트 실행 최신 상태로 동기화
59
- - 테스트는 트랜잭션으로 격리되어 자동 롤백
58
+ - Sync to the latest state before running tests
59
+ - Each test is isolated with a transaction that auto-rolls back
60
60
 
61
- ### 주의사항
61
+ ### Notes
62
62
 
63
- **CRITICAL: sourceDb vs targetDb 혼동 방지**
63
+ **CRITICAL: Prevent sourceDb vs targetDb confusion**
64
64
 
65
- - `fixture gen`: sourceDb=fixture, targetDb=fixture (fixture 내부에서 생성)
65
+ - `fixture gen`: sourceDb=fixture, targetDb=fixture (generated inside fixture)
66
66
  - `fixture fetch`: sourceDb=production, targetDb=fixture (production → fixture)
67
- - 잘못 설정하면 FK 참조 오류 발생
67
+ - Incorrect configuration causes FK reference errors
68
68
 
69
- **예시 (올바른 설정)**:
69
+ **Example (correct configuration)**:
70
70
  ```typescript
71
- // fixture gen: fixture DB 내에서 참조 저장
71
+ // fixture gen: reference and save within fixture DB
72
72
  const fixtureDb = createKnexInstance(Sonamu.dbConfig.fixture);
73
73
  const generator = new FixtureGenerator(fixtureDb, fixtureDb, "fixture", EntityManager);
74
74
 
@@ -78,182 +78,182 @@ const fixtureDb = createKnexInstance(Sonamu.dbConfig.fixture);
78
78
  const generator = new FixtureGenerator(sourceDb, fixtureDb, "fixture", EntityManager);
79
79
  ```
80
80
 
81
- **참고**: Fixture CLI 명령어 상세 사용법은 `fixture-cli.md` 참조
81
+ **Note**: For detailed Fixture CLI command usage, see `fixture-cli.md`
82
82
 
83
83
  ---
84
84
 
85
- ## Seed Data 관리
85
+ ## Seed Data Management
86
86
 
87
- 테스트를 위한 기본 데이터(seed data) dump 파일에 추가하여 관리한다.
87
+ Base data for testing (seed data) is managed by adding it to dump files.
88
88
 
89
- ### 전체 워크플로우 개요
89
+ ### Overall Workflow
90
90
 
91
- Seed data 관리는 2단계로 진행된다:
91
+ Seed data management proceeds in 2 phases:
92
92
 
93
- | 단계 | 목적 | 대상 DB |
94
- |------|------|---------|
95
- | **Phase 1** | 개발/테스트용 seed 준비 | `project_test`, `project_fixture` |
96
- | **Phase 2** | 실제 DB에 seed 적용 | `project` (실제 DB) |
93
+ | Phase | Purpose | Target DB |
94
+ |-------|---------|-----------|
95
+ | **Phase 1** | Prepare seed for development/testing | `project_test`, `project_fixture` |
96
+ | **Phase 2** | Apply seed to the actual DB | `project` (actual DB) |
97
97
 
98
98
  ---
99
99
 
100
- ### Phase 1: 개발/테스트용 Seed 준비
100
+ ### Phase 1: Prepare Seed for Development/Testing
101
101
 
102
- 개발 테스트를 위한 더미 데이터를 준비하는 단계.
102
+ The step of preparing dummy data for testing during development.
103
103
 
104
- #### 1-1. 초기 dump 생성 (테이블 구조만)
104
+ #### 1-1. Generate Initial Dump (Table Structure Only)
105
105
 
106
106
  ```bash
107
107
  pnpm dump
108
108
  ```
109
109
 
110
- 시점에서 생성된 `database/scripts/dump.sql`은:
111
- - CREATE TABLE 구문
112
- - CREATE SEQUENCE 구문
110
+ The `database/scripts/dump.sql` generated at this point contains:
111
+ - CREATE TABLE statements
112
+ - CREATE SEQUENCE statements
113
113
  - ALTER TABLE ... PRIMARY KEY
114
114
  - ALTER TABLE ... FOREIGN KEY
115
- - **INSERT문은 없음** (아직 데이터가 없으므로)
115
+ - **No INSERT statements** (no data yet)
116
116
 
117
- #### 1-2. dump 파일에 INSERT 추가
117
+ #### 1-2. Add INSERT Statements to Dump File
118
118
 
119
- `database/scripts/dump.sql` 파일을 열고, **FK CONSTRAINT 전**에 INSERT문을 추가한다.
119
+ Open `database/scripts/dump.sql` and add INSERT statements **before the FK CONSTRAINT** section.
120
120
 
121
- **중요: FK 의존성 순서를 고려하여 작성**
121
+ **Important: Write in order considering FK dependency order**
122
122
  ```sql
123
- -- 독립 테이블부터
123
+ -- Independent tables first
124
124
  INSERT INTO public.institutions (id, created_at, name, code) VALUES
125
- (1, '2024-01-01 00:00:00+09', '본원', 'HQ');
125
+ (1, '2024-01-01 00:00:00+09', 'Headquarters', 'HQ');
126
126
 
127
- -- 참조 테이블 (institutions를 참조)
127
+ -- Reference tables (referencing institutions)
128
128
  INSERT INTO public.departments (id, created_at, name, code, institution_id) VALUES
129
- (1, '2024-01-01 00:00:00+09', '연구부', 'RND', 1);
129
+ (1, '2024-01-01 00:00:00+09', 'Research', 'RND', 1);
130
130
 
131
- -- 시퀀스 설정 (INSERT)
131
+ -- Set sequence values (after INSERT)
132
132
  SELECT pg_catalog.setval('public.institutions_id_seq', 1, true);
133
133
  SELECT pg_catalog.setval('public.departments_id_seq', 1, true);
134
134
  ```
135
135
 
136
- #### 1-3. test DB에 적용
136
+ #### 1-3. Apply to Test DB
137
137
 
138
138
  ```bash
139
139
  pnpm seed
140
140
  ```
141
141
 
142
- `database/scripts/seed.sh`가 실행되며:
143
- - `SOURCE_DB="${DATABASE_NAME}_test"` → dump.sql test DB에 적용
142
+ `database/scripts/seed.sh` runs and:
143
+ - `SOURCE_DB="${DATABASE_NAME}_test"` → applies dump.sql to the test DB
144
144
 
145
- #### 1-4. fixture DB에 동기화
145
+ #### 1-4. Sync to Fixture DB
146
146
 
147
147
  ```bash
148
148
  pnpm sonamu fixture sync
149
149
  ```
150
150
 
151
- test DB 데이터를 fixture DB로 복사.
151
+ Copies test DB data to the fixture DB.
152
152
 
153
153
  ---
154
154
 
155
- ### Phase 2: 실제 DB에 Seed 적용
155
+ ### Phase 2: Apply Seed to Actual DB
156
156
 
157
157
  **⚠️ CRITICAL WARNING:**
158
- - 단계는 실제 DB(`project`)에 데이터를 넣는다
159
- - 기존 데이터가 있다면 덮어쓰여질 수 있다
160
- - **반드시 사용자에게 확인 진행해야 한다**
158
+ - This step inserts data into the actual DB (`project`)
159
+ - Existing data may be overwritten
160
+ - **You must confirm with the user before proceeding**
161
161
 
162
- **Claude Code 규칙:**
162
+ **Claude Code Rules:**
163
163
  ```
164
- 실제 DB에 seed 적용하기 전에:
165
- 1. 사용자에게 "실제 데이터베이스(project)에 seed 데이터를 적용하시겠습니까?" 질문
166
- 2. 사용자가 명시적으로 승인할 때만 진행
167
- 3. 승인 없이 절대 실행하지 말것
164
+ Before applying seed to the actual DB:
165
+ 1. Ask the user: "Would you like to apply seed data to the actual database (project)?"
166
+ 2. Only proceed when the user explicitly approves
167
+ 3. Never run without approval
168
168
  ```
169
169
 
170
- #### 2-1. 현재 상태 확인
170
+ #### 2-1. Verify Current State
171
171
 
172
172
  ```bash
173
- # test/fixture DB에 데이터가 들어가 있어야
173
+ # Data must already be in test/fixture DBs
174
174
  PGPASSWORD=1234 psql -h 0.0.0.0 -U postgres -d project_test -c "SELECT COUNT(*) FROM users;"
175
175
  ```
176
176
 
177
- #### 2-2. 최종 dump 생성
177
+ #### 2-2. Generate Final Dump
178
178
 
179
179
  ```bash
180
- # test/fixture 데이터가 포함된 dump 생성
180
+ # Generate a dump that includes test/fixture data
181
181
  pnpm dump
182
182
  ```
183
183
 
184
- 이번 dump에는 **INSERT문이 포함**되어 있다 (1-2에서 추가한 데이터).
184
+ This dump **includes INSERT statements** (the data added in step 1-2).
185
185
 
186
- #### 2-3. seed.sh 파일 수정
186
+ #### 2-3. Modify seed.sh File
187
187
 
188
- `database/scripts/seed.sh`를 열고 FIXTURE_DB 변경:
188
+ Open `database/scripts/seed.sh` and change FIXTURE_DB:
189
189
 
190
190
  ```bash
191
- # 변경 (개발/테스트 단계)
191
+ # Before (development/testing phase)
192
192
  FIXTURE_DB="${DATABASE_NAME}_fixture"
193
193
 
194
- # 변경 (실제 DB에 seed)
194
+ # After (seeding actual DB)
195
195
  FIXTURE_DB="${DATABASE_NAME}"
196
196
  ```
197
197
 
198
- #### 2-4. 실제 DB에 seed 실행
198
+ #### 2-4. Run Seed on Actual DB
199
199
 
200
- **⚠️ 사용자 승인 후에만 실행:**
200
+ **⚠️ Run only after user approval:**
201
201
 
202
202
  ```bash
203
203
  pnpm seed
204
204
  ```
205
205
 
206
- 이제 실제 DB(`project`)에 seed 데이터가 적용된다.
206
+ Seed data is now applied to the actual DB (`project`).
207
207
 
208
- #### 2-5. 확인
208
+ #### 2-5. Verify
209
209
 
210
210
  ```bash
211
- # 실제 DB에서 데이터 확인
211
+ # Verify data in actual DB
212
212
  PGPASSWORD=1234 psql -h 0.0.0.0 -U postgres -d project -c "SELECT * FROM departments LIMIT 5;"
213
213
  ```
214
214
 
215
- #### 2-6. seed.sh 원복 (중요!)
215
+ #### 2-6. Restore seed.sh (Important!)
216
216
 
217
- 실제 DB seed 완료 후, seed.sh 원래대로 되돌려야 다음 개발 test DB를 사용한다:
217
+ After the actual DB seed is complete, restore seed.sh to its original state so the next development cycle uses the test DB:
218
218
 
219
219
  ```bash
220
220
  # database/scripts/seed.sh
221
- FIXTURE_DB="${DATABASE_NAME}_fixture" # 원복
221
+ FIXTURE_DB="${DATABASE_NAME}_fixture" # restored
222
222
  ```
223
223
 
224
224
  ---
225
225
 
226
- ### 요약: Phase 1 vs Phase 2
226
+ ### Summary: Phase 1 vs Phase 2
227
227
 
228
- | 항목 | Phase 1 (개발/테스트) | Phase 2 (실제 DB) |
229
- |------|---------------------|------------------|
230
- | **시점** | 개발 테스트 데이터 준비 | 개발 완료 실제 데이터 준비 |
231
- | **dump 횟수** | 1 (테이블 구조) | 2 (데이터 포함) |
232
- | **대상 DB** | `project_test` → `project_fixture` | `project` |
228
+ | Item | Phase 1 (Development/Testing) | Phase 2 (Actual DB) |
229
+ |------|-------------------------------|---------------------|
230
+ | **Timing** | Preparing test data during development | Preparing actual data after development is complete |
231
+ | **Dump count** | 1 time (table structure) | 2 times (includes data) |
232
+ | **Target DB** | `project_test` → `project_fixture` | `project` |
233
233
  | **seed.sh** | `FIXTURE_DB="${DATABASE_NAME}_fixture"` | `FIXTURE_DB="${DATABASE_NAME}"` |
234
- | **사용자 승인** | 불필요 | **반드시 필요** |
234
+ | **User approval** | Not required | **Required** |
235
235
 
236
236
  ---
237
237
 
238
- ### 워크플로우 (Phase 1 간단 버전)
238
+ ### Legacy Workflow (Phase 1 Simple Version)
239
239
 
240
240
  ```bash
241
- # 1. test DB에 기본 데이터 직접 추가 (psql 또는 Sonamu UI 사용)
241
+ # 1. Directly add base data to test DB (using psql or Sonamu UI)
242
242
  PGPASSWORD=1234 psql -h 0.0.0.0 -U postgres -d project_test
243
243
 
244
- # 2. dump 생성
244
+ # 2. Generate dump
245
245
  pnpm dump
246
246
 
247
- # 3. fixture DB에 적용
247
+ # 3. Apply to fixture DB
248
248
  pnpm seed
249
249
 
250
- # 4. (선택) sonamu fixture sync
250
+ # 4. (Optional) sonamu fixture sync
251
251
  pnpm sonamu fixture sync
252
252
  ```
253
253
 
254
- ### dump 파일에 seed data 추가 위치
254
+ ### Position for Adding Seed Data in Dump File
255
255
 
256
- **pg_dump --inserts 출력 순서 (miomock 기준):**
256
+ **pg_dump --inserts output order (based on miomock):**
257
257
 
258
258
  ```sql
259
259
  -- 1~40: SET statements & Extensions
@@ -273,9 +273,9 @@ ALTER SEQUENCE public.companies_id_seq OWNED BY public.companies.id;
273
273
  -- 480~564: ALTER TABLE ... DEFAULT (Name: xxx id; Type: DEFAULT)
274
274
  ALTER TABLE ONLY public.companies ALTER COLUMN id SET DEFAULT nextval(...);
275
275
 
276
- -- ⭐ 574~1770: INSERT INTO ... ← SEED DATA 추가 위치
277
- INSERT INTO public.companies VALUES (1, '2025-11-25 00:17:02+09', '테크놀로지 주식회사');
278
- INSERT INTO public.departments VALUES (1, '2024-01-01 01:00:00+09', '개발팀', 1, NULL, DEFAULT);
276
+ -- ⭐ 574~1770: INSERT INTO ... ← SEED DATA INSERTION POSITION
277
+ INSERT INTO public.companies VALUES (1, '2025-11-25 00:17:02+09', 'Tech Corp');
278
+ INSERT INTO public.departments VALUES (1, '2024-01-01 01:00:00+09', 'Dev Team', 1, NULL, DEFAULT);
279
279
  INSERT INTO public.employees VALUES (1, '2024-01-01 01:00:00+09', 1, 3, 'EMP001', 75000.00, ...);
280
280
 
281
281
  -- 1775~1862: SELECT pg_catalog.setval (Name: xxx_id_seq; Type: SEQUENCE SET)
@@ -287,86 +287,86 @@ ALTER TABLE ONLY public.companies ADD CONSTRAINT companies_pkey PRIMARY KEY (id)
287
287
  -- 2010~2017: CREATE INDEX
288
288
  CREATE INDEX projects_name_description_pgroonga_index ON public.projects ...;
289
289
 
290
- -- WRONG 2024~: ALTER TABLE ... FOREIGN KEY (FK constraint - 전에 데이터 있어야 함!)
290
+ -- 2024~: ALTER TABLE ... FOREIGN KEY (FK constraint - data must exist before this!)
291
291
  ALTER TABLE ONLY public.departments
292
292
  ADD CONSTRAINT departments_company_id_foreign FOREIGN KEY (company_id) REFERENCES public.companies(id);
293
293
  ```
294
294
 
295
- ### CRITICAL: Seed Data 위치 규칙
295
+ ### CRITICAL: Seed Data Placement Rule
296
296
 
297
- **seed data 반드시 FK CONSTRAINT 전에 추가해야 한다.**
297
+ **Seed data must be added before FK CONSTRAINTs.**
298
298
 
299
- | 위치 | 결과 |
300
- |------|------|
301
- | FK CONSTRAINT | OK - 데이터 삽입 FK 검사 |
302
- | FK CONSTRAINT | FAIL - 참조 테이블 데이터 없어서 FK 위반 |
299
+ | Position | Result |
300
+ |----------|--------|
301
+ | Before FK CONSTRAINT | OK - FK check after data insertion |
302
+ | After FK CONSTRAINT | FAIL - FK violation because referenced table has no data |
303
303
 
304
- ### 테이블 의존성 순서
304
+ ### Table Dependency Order
305
305
 
306
- seed data INSERT 순서는 **FK 의존성**을 따라야 한다:
306
+ Seed data INSERT order must follow **FK dependencies**:
307
307
 
308
308
  ```sql
309
- -- 1. 독립 테이블 먼저 (FK 없는 테이블)
310
- INSERT INTO public.institutions (id, name, code) VALUES (1, '본원', 'HQ');
309
+ -- 1. Independent tables first (tables without FKs)
310
+ INSERT INTO public.institutions (id, name, code) VALUES (1, 'Headquarters', 'HQ');
311
311
 
312
- -- 2. 1을 참조하는 테이블
313
- INSERT INTO public.departments (id, name, institution_id) VALUES (1, '연구부', 1);
312
+ -- 2. Tables referencing step 1
313
+ INSERT INTO public.departments (id, name, institution_id) VALUES (1, 'Research', 1);
314
314
 
315
- -- 3. 1, 2를 참조하는 테이블
316
- INSERT INTO public.users (id, name, institution_id, department_id) VALUES (1, '관리자', 1, 1);
315
+ -- 3. Tables referencing steps 1 and 2
316
+ INSERT INTO public.users (id, name, institution_id, department_id) VALUES (1, 'Admin', 1, 1);
317
317
  ```
318
318
 
319
- ### 시퀀스 설정
319
+ ### Setting Sequence Values
320
320
 
321
- seed data 추가 시퀀스 현재값도 업데이트해야 한다:
321
+ After adding seed data, the sequence current values must also be updated:
322
322
 
323
323
  ```sql
324
- -- seed data의 최대 id 이후로 시퀀스 설정
325
- SELECT pg_catalog.setval('public.users_id_seq', 10, true); -- 다음 id 11부터
324
+ -- Set sequence to after the maximum id in seed data
325
+ SELECT pg_catalog.setval('public.users_id_seq', 10, true); -- next id starts from 11
326
326
  SELECT pg_catalog.setval('public.departments_id_seq', 5, true);
327
327
  ```
328
328
 
329
- ### 예시: 최소 seed data
329
+ ### Example: Minimal Seed Data
330
330
 
331
331
  ```sql
332
- -- institutions (독립)
332
+ -- institutions (independent)
333
333
  INSERT INTO public.institutions (id, created_at, name, code) VALUES
334
- (1, '2024-01-01 00:00:00+09', '본원', 'HQ');
334
+ (1, '2024-01-01 00:00:00+09', 'Headquarters', 'HQ');
335
335
 
336
- -- departments (institutions 참조)
336
+ -- departments (references institutions)
337
337
  INSERT INTO public.departments (id, created_at, name, code, institution_id, is_active) VALUES
338
- (1, '2024-01-01 00:00:00+09', '연구부', 'RND', 1, true);
338
+ (1, '2024-01-01 00:00:00+09', 'Research', 'RND', 1, true);
339
339
 
340
- -- 시퀀스 설정
340
+ -- Set sequences
341
341
  SELECT pg_catalog.setval('public.institutions_id_seq', 1, true);
342
342
  SELECT pg_catalog.setval('public.departments_id_seq', 1, true);
343
343
  ```
344
344
 
345
345
  ---
346
346
 
347
- ## 포트 충돌 해결
347
+ ## Resolving Port Conflicts
348
348
 
349
- `pnpm docker:up` 실행 포트가 이미 사용중이라는 오류가 발생하면:
349
+ If a port-already-in-use error occurs when running `pnpm docker:up`:
350
350
 
351
- ### 1단계: 실행 중인 컨테이너 확인
351
+ ### Step 1: Check Running Containers
352
352
 
353
353
  ```bash
354
354
  docker ps --format "table {{.Names}}\t{{.Ports}}"
355
355
  ```
356
356
 
357
- ### 2단계: 컨테이너명 비교
357
+ ### Step 2: Compare Container Names
358
358
 
359
- **현재 프로젝트의 컨테이너명 확인:**
359
+ **Check the current project's container name:**
360
360
  ```bash
361
- # packages/api/.env 파일에서 CONTAINER_NAME 확인
361
+ # Check CONTAINER_NAME in packages/api/.env
362
362
  cat packages/api/.env | grep CONTAINER_NAME
363
363
  ```
364
364
 
365
- ### 3단계: 상황별 처리
365
+ ### Step 3: Handle by Situation
366
366
 
367
- #### 컨테이너명이 동일한 경우
367
+ #### If Container Names are the Same
368
368
 
369
- 이전에 같은 프로젝트의 컨테이너가 띄워져 있는 것. 내리고 다시 올리기:
369
+ A container from the same project was started earlier. Bring it down and bring it back up:
370
370
 
371
371
  ```bash
372
372
  cd packages/api
@@ -374,67 +374,67 @@ pnpm docker:down
374
374
  pnpm docker:up
375
375
  ```
376
376
 
377
- #### 컨테이너명이 다른 경우
377
+ #### If Container Names are Different
378
378
 
379
- 다른 프로젝트가 같은 포트를 사용 중. 프로젝트의 포트를 변경해야 함.
379
+ Another project is using the same port. The new project's port must be changed.
380
380
 
381
- **수정할 파일 2개:**
381
+ **Two files to modify:**
382
382
 
383
383
  1. `packages/api/.env`
384
384
  ```bash
385
- # 변경 전
385
+ # Before
386
386
  DB_PORT=5432
387
387
 
388
- # 변경 (5433~5439 사용하지 않는 포트)
388
+ # After (use an unused port between 5433–5439)
389
389
  DB_PORT=5433
390
390
  ```
391
391
 
392
392
  2. `packages/api/database/docker-compose.yml`
393
393
  ```yaml
394
- # 변경 전
394
+ # Before
395
395
  ports:
396
396
  - "5432:5432"
397
397
 
398
- # 변경 후
398
+ # After
399
399
  ports:
400
400
  - "5433:5432"
401
401
  ```
402
402
 
403
403
  3. `packages/api/src/sonamu.config.ts`
404
404
  ```typescript
405
- // 변경 전
405
+ // Before
406
406
  port: 5432,
407
407
 
408
- // 변경 후
408
+ // After
409
409
  port: 5433,
410
410
  ```
411
411
 
412
- **포트 선택 가이드:**
413
- - PostgreSQL 기본 포트: 5432
414
- - 사용 가능한 범위: 5433 ~ 5439
415
- - `docker ps`로 현재 사용 중인 포트 확인 중복되지 않는 번호 선택
412
+ **Port Selection Guide:**
413
+ - PostgreSQL default port: 5432
414
+ - Available range: 5433 ~ 5439
415
+ - Check currently used ports with `docker ps` and choose a number that is not duplicated
416
416
 
417
- ### 변경 재실행
417
+ ### Restart After Changes
418
418
 
419
419
  ```bash
420
420
  pnpm docker:up
421
421
  ```
422
422
 
423
- ## DB 연결 설정 파일
423
+ ## DB Connection Configuration Files
424
424
 
425
- | 파일 | 용도 |
426
- |------|------|
427
- | `packages/api/.env` | 환경변수 (DB_HOST, DB_PORT, DB_USER ) |
428
- | `packages/api/database/docker-compose.yml` | Docker 컨테이너 설정 |
429
- | `packages/api/src/sonamu.config.ts` | Sonamu DB 연결 설정 |
425
+ | File | Purpose |
426
+ |------|---------|
427
+ | `packages/api/.env` | Environment variables (DB_HOST, DB_PORT, DB_USER, etc.) |
428
+ | `packages/api/database/docker-compose.yml` | Docker container configuration |
429
+ | `packages/api/src/sonamu.config.ts` | Sonamu DB connection configuration |
430
430
 
431
- ## .env 기본 설정
431
+ ## .env Default Settings
432
432
 
433
433
  ```bash
434
434
  DB_HOST=0.0.0.0
435
435
  DB_PORT=5432
436
436
  DB_USER=postgres
437
437
  DB_PASSWORD=1234
438
- CONTAINER_NAME=[프로젝트명]-container
439
- DATABASE_NAME=[프로젝트명]
438
+ CONTAINER_NAME=[project-name]-container
439
+ DATABASE_NAME=[project-name]
440
440
  ```