create-sonamu 0.1.3 β 0.1.4
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.
- package/README.md +125 -9
- package/package.json +1 -1
- package/template/src/README.md +122 -8
- package/template/src/packages/api/package.json +2 -1
- package/template/src/packages/api/package.json.bak +1 -0
- package/template/src/packages/api/src/sonamu.config.ts +10 -16
- package/template/src/packages/api/src/typings/sonamu.d.ts +0 -2
- package/template/src/packages/web/package.json +1 -0
- package/template/src/packages/web/package.json.bak +1 -0
package/README.md
CHANGED
|
@@ -124,8 +124,8 @@ pnpm dev
|
|
|
124
124
|
|
|
125
125
|
π **μλ£!**
|
|
126
126
|
|
|
127
|
-
- API: http://localhost:
|
|
128
|
-
- Sonamu UI: http://localhost:
|
|
127
|
+
- API: http://localhost:34900
|
|
128
|
+
- Sonamu UI: http://localhost:34900/sonamu-ui (μν°ν° κ΄λ¦¬)
|
|
129
129
|
- Web: http://localhost:3028
|
|
130
130
|
|
|
131
131
|
---
|
|
@@ -167,8 +167,8 @@ pnpm dev
|
|
|
167
167
|
|
|
168
168
|
| μλΉμ€ | ν¬νΈ | URL |
|
|
169
169
|
| -------------- | ------------------ | -------------------------------- |
|
|
170
|
-
| **API μλ²** | `BASE_PORT` (
|
|
171
|
-
| **Sonamu UI** | - | http://localhost:
|
|
170
|
+
| **API μλ²** | `BASE_PORT` (34900) | http://localhost:34900 |
|
|
171
|
+
| **Sonamu UI** | - | http://localhost:34900/sonamu-ui |
|
|
172
172
|
| **Web κ°λ°** | `BASE_PORT + 2000` (3028) | http://localhost:3028 |
|
|
173
173
|
| **PostgreSQL** | 5432 | - |
|
|
174
174
|
|
|
@@ -188,11 +188,13 @@ pnpm dev
|
|
|
188
188
|
| `pnpm build` | νλ‘λμ
λΉλ |
|
|
189
189
|
| `pnpm start` | νλ‘λμ
μλ² μ€ν |
|
|
190
190
|
| `pnpm test` | ν
μ€νΈ μ€ν |
|
|
191
|
-
| `pnpm
|
|
192
|
-
| `pnpm
|
|
193
|
-
| `pnpm
|
|
191
|
+
| `pnpm docker:up` | Docker λ°μ΄ν°λ² μ΄μ€ μμ |
|
|
192
|
+
| `pnpm docker:down` | Docker λ°μ΄ν°λ² μ΄μ€ μ€μ§ |
|
|
193
|
+
| `pnpm docker:reset` | λ°μ΄ν°λ² μ΄μ€ μ΄κΈ°ν (λ³Όλ₯¨ μμ ν μ¬μμ) |
|
|
194
194
|
| `pnpm dump` | ν
μ€νΈ DB β λ€ν νμΌ μμ± |
|
|
195
195
|
| `pnpm seed` | λ€ν νμΌ β fixture DB μ μ© |
|
|
196
|
+
| `pnpm sonamu skills sync` | 곡μ Skills λκΈ°ν |
|
|
197
|
+
| `pnpm sonamu skills create <name>` | 컀μ€ν
Skill μμ± |
|
|
196
198
|
|
|
197
199
|
### Web (`web/`)
|
|
198
200
|
|
|
@@ -210,7 +212,7 @@ pnpm dev
|
|
|
210
212
|
|
|
211
213
|
### 1. μν°ν° μμ±
|
|
212
214
|
|
|
213
|
-
API μλ²λ₯Ό μ€νν μνμμ http://localhost:
|
|
215
|
+
API μλ²λ₯Ό μ€νν μνμμ http://localhost:34900/sonamu-ui μ μ β **Entities** ν β **+ Entity** ν΄λ¦
|
|
214
216
|
|
|
215
217
|
### 2. μλ μμ±λλ νμΌλ€
|
|
216
218
|
|
|
@@ -292,6 +294,120 @@ function UserListPage() {
|
|
|
292
294
|
|
|
293
295
|
---
|
|
294
296
|
|
|
297
|
+
## π€ AI κ°λ° λμ°λ―Έ (Skills)
|
|
298
|
+
|
|
299
|
+
Sonamu νλ‘μ νΈλ **Claude Code**μ ν¨κ» μ¬μ©νλλ‘ μ€κ³λμμ΅λλ€. Skillsλ AIκ° Sonamu νλ μμν¬λ₯Ό λ μ μ΄ν΄νκ³ νμ©ν μ μλλ‘ λλ μ§μ λ² μ΄μ€μ
λλ€.
|
|
300
|
+
|
|
301
|
+
### μλ μ€μΉ
|
|
302
|
+
|
|
303
|
+
νλ‘μ νΈλ₯Ό μμ±νλ©΄ `.claude/skills/sonamu` λλ ν λ¦¬κ° μλμΌλ‘ μ€μ λ©λλ€ (postinstall μ€ν¬λ¦½νΈ μ€ν).
|
|
304
|
+
|
|
305
|
+
```
|
|
306
|
+
.claude/
|
|
307
|
+
βββ skills/
|
|
308
|
+
β βββ sonamu/ # 곡μ Sonamu Skills (μλ λκΈ°ν)
|
|
309
|
+
β β βββ api.md
|
|
310
|
+
β β βββ entity-basic.md
|
|
311
|
+
β β βββ model.md
|
|
312
|
+
β β βββ puri.md
|
|
313
|
+
β β βββ ...
|
|
314
|
+
β βββ local/ # νλ‘μ νΈλ³ 컀μ€ν
Skills
|
|
315
|
+
β βββ my-skill.md
|
|
316
|
+
βββ CLAUDE.md # νλ‘μ νΈ AI κ°μ΄λ (Sonamu μΉμ
ν¬ν¨)
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Skills λκΈ°ν
|
|
320
|
+
|
|
321
|
+
Sonamu μ
λ°μ΄νΈ ν μ΅μ Skillsλ₯Ό λ°μνλ €λ©΄:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
pnpm sonamu skills sync
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
μ΄ λͺ
λ Ήμ:
|
|
328
|
+
- μ΅μ 곡μ Skillsλ₯Ό `.claude/skills/sonamu`λ‘ λκΈ°ν (symlink λλ 볡μ¬)
|
|
329
|
+
- `CLAUDE.md`μ Sonamu κ΄λ ¨ μΉμ
μ μ
λ°μ΄νΈ (λ§μ»€ μμλ§)
|
|
330
|
+
|
|
331
|
+
### 컀μ€ν
Skill μμ±
|
|
332
|
+
|
|
333
|
+
νλ‘μ νΈμμ λ°κ²¬ν ν΄κ²° λ°©λ²μ΄λ νμ Skillλ‘ μ μ₯:
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
pnpm sonamu skills create migration-helper
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
μμ±λ νμΌμ νΈμ§:
|
|
340
|
+
|
|
341
|
+
```markdown
|
|
342
|
+
---
|
|
343
|
+
name: migration-helper
|
|
344
|
+
category: other
|
|
345
|
+
created_at: 2026-02-03
|
|
346
|
+
status: draft
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
# λ§μ΄κ·Έλ μ΄μ
FK μμ λ¬Έμ ν΄κ²°
|
|
350
|
+
|
|
351
|
+
## μν©
|
|
352
|
+
|
|
353
|
+
λ§μ΄κ·Έλ μ΄μ
μμ μΈλν€λ₯Ό μΆκ°ν λ ν
μ΄λΈ μμ± μμκ° λ§μ§ μμ μλ¬ λ°μ
|
|
354
|
+
|
|
355
|
+
## ν΄κ²° λ°©λ²
|
|
356
|
+
|
|
357
|
+
μ°Έμ‘°λλ ν
μ΄λΈμ λ¨Όμ μμ±νκ³ , μ°Έμ‘°νλ ν
μ΄λΈμ λμ€μ μμ±
|
|
358
|
+
|
|
359
|
+
## μ½λ μμ
|
|
360
|
+
|
|
361
|
+
\`\`\`typescript
|
|
362
|
+
// 1. users ν
μ΄λΈ λ¨Όμ μμ±
|
|
363
|
+
await knex.schema.createTable('users', ...)
|
|
364
|
+
|
|
365
|
+
// 2. posts ν
μ΄λΈ λμ€μ μμ± (users μ°Έμ‘°)
|
|
366
|
+
await knex.schema.createTable('posts', (table) => {
|
|
367
|
+
table.integer('user_id').references('users.id')
|
|
368
|
+
})
|
|
369
|
+
\`\`\`
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**νμΌλͺ
κ·μΉ**:
|
|
373
|
+
- μλμΌλ‘ μμ ν μ΄λ¦μΌλ‘ λ³νλ©λλ€
|
|
374
|
+
- μ: `"bug fix"` β `bug-fix.md`
|
|
375
|
+
- μ: `"λ§μ΄κ·Έλ μ΄μ
/ν¬νΌ"` β `λ§μ΄κ·Έλ μ΄μ
-ν¬νΌ.md`
|
|
376
|
+
|
|
377
|
+
### μ¬μ© κ°λ₯ν Skills
|
|
378
|
+
|
|
379
|
+
μμ±λ νλ‘μ νΈμ ν¬ν¨λ μ£Όμ Skills:
|
|
380
|
+
|
|
381
|
+
| Skill | μ€λͺ
|
|
|
382
|
+
|-------|------|
|
|
383
|
+
| **project-init** | νλ‘μ νΈ μμ± λ° μ΄κΈ°ν |
|
|
384
|
+
| **entity-basic** | Entity μμ±/μμ κΈ°λ³Έ |
|
|
385
|
+
| **entity-relations** | Entity κ΄κ³ μ μ (BelongsToOne, HasMany λ±) |
|
|
386
|
+
| **model** | Model ν΄λμ€ μμ± ν¨ν΄ |
|
|
387
|
+
| **api** | @api λ°μ½λ μ΄ν°λ‘ API λ
ΈμΆ |
|
|
388
|
+
| **puri** | νμ
μμ 쿼리 λΉλ μ¬μ©λ² |
|
|
389
|
+
| **subset** | API μλ΅ νλ λ²μ μ μ |
|
|
390
|
+
| **upsert** | κ΄κ³ λ°μ΄ν° μ μ₯ (UpsertBuilder) |
|
|
391
|
+
| **testing** | ν
μ€νΈ μμ± (bootstrap, test, testAs) |
|
|
392
|
+
| **migration** | λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ
|
|
|
393
|
+
| **frontend** | νλ‘ νΈμλμμ API νΈμΆ |
|
|
394
|
+
| **i18n** | λ€κ΅μ΄ μ§μ |
|
|
395
|
+
| **workflow** | μ 체 κ°λ° μν¬νλ‘μ° |
|
|
396
|
+
|
|
397
|
+
### Claude Code μ¬μ© ν
|
|
398
|
+
|
|
399
|
+
Skillsκ° μ€μ λλ©΄ Claudeμκ² λ€μκ³Ό κ°μ΄ μμ²ν μ μμ΅λλ€:
|
|
400
|
+
|
|
401
|
+
```
|
|
402
|
+
"User μν°ν°λ₯Ό μμ±νκ³ CRUD APIλ₯Ό λ§λ€μ΄μ€"
|
|
403
|
+
"Postμ Commentμ κ΄κ³λ₯Ό μ€μ ν΄μ€"
|
|
404
|
+
"API ν
μ€νΈ μ½λλ₯Ό μμ±ν΄μ€"
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Claudeλ `.claude/skills/sonamu`μ μ§μμ νμ©νμ¬ Sonamu λ°©μμ λ§λ μ½λλ₯Ό μμ±ν©λλ€.
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
295
411
|
## ποΈ λ°μ΄ν°λ² μ΄μ€
|
|
296
412
|
|
|
297
413
|
### Docker μ΄λ―Έμ§
|
|
@@ -356,7 +472,7 @@ pnpm sonamu fixture sync # ν
μ€νΈ DBλ‘ λκΈ°ν
|
|
|
356
472
|
|
|
357
473
|
## π λ μμ보기
|
|
358
474
|
|
|
359
|
-
- π [Sonamu 곡μ λ¬Έμ](https://
|
|
475
|
+
- π [Sonamu 곡μ λ¬Έμ](https://sonamu.cartanova.ai/)
|
|
360
476
|
- π¬ [μ΄μ & νΌλλ°±](https://github.com/cartanova-ai/sonamu/issues)
|
|
361
477
|
|
|
362
478
|
---
|
package/package.json
CHANGED
package/template/src/README.md
CHANGED
|
@@ -56,12 +56,12 @@ pnpm dev
|
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
API μλ²κ° μμλλ©΄ λ€μ μ£Όμλ‘ μ μν μ μμ΅λλ€:
|
|
59
|
-
- **API μλ²**: http://localhost:
|
|
60
|
-
- **Sonamu UI**: http://localhost:
|
|
59
|
+
- **API μλ²**: http://localhost:34900
|
|
60
|
+
- **Sonamu UI**: http://localhost:34900/sonamu-ui (μν°ν° κ΄λ¦¬)
|
|
61
61
|
|
|
62
62
|
### 4. 첫 λ²μ§Έ μν°ν° μμ±
|
|
63
63
|
|
|
64
|
-
1. Sonamu UI μ΄κΈ°: http://localhost:
|
|
64
|
+
1. Sonamu UI μ΄κΈ°: http://localhost:34900/sonamu-ui
|
|
65
65
|
2. **Entities** ν β **"+ Entity"** ν΄λ¦
|
|
66
66
|
3. μν°ν° μ μ (μ: `User`, `Post`)
|
|
67
67
|
4. `api/src/application/`κ³Ό `web/src/services/`μ νμΌμ΄ μλμΌλ‘ μμ±λ©λλ€
|
|
@@ -107,8 +107,8 @@ web/src/services/
|
|
|
107
107
|
|
|
108
108
|
| μλΉμ€ | ν¬νΈ | URL |
|
|
109
109
|
| ----------- | ----------------------- | ------------------------------- |
|
|
110
|
-
| API μλ² | `BASE_PORT` (κΈ°λ³Έ
|
|
111
|
-
| Sonamu UI | - | http://localhost:
|
|
110
|
+
| API μλ² | `BASE_PORT` (κΈ°λ³Έ 34900) | http://localhost:34900 |
|
|
111
|
+
| Sonamu UI | - | http://localhost:34900/sonamu-ui |
|
|
112
112
|
| Web ν΄λΌμ΄μΈνΈ | `BASE_PORT + 2000` | http://localhost:3028 |
|
|
113
113
|
| PostgreSQL | 5432 | - |
|
|
114
114
|
|
|
@@ -135,6 +135,8 @@ web/src/services/
|
|
|
135
135
|
| `pnpm docker:reset` | Docker DB μ΄κΈ°ν (λ³Όλ₯¨ μμ ν μ¬μμ) |
|
|
136
136
|
| `pnpm dump` | ν
μ€νΈ DB λ€ν μμ± |
|
|
137
137
|
| `pnpm seed` | λ€νλ₯Ό fixture DBμ μ μ© |
|
|
138
|
+
| `pnpm sonamu skills sync` | 곡μ Skills λκΈ°ν |
|
|
139
|
+
| `pnpm sonamu skills create <name>` | 컀μ€ν
Skill μμ± |
|
|
138
140
|
|
|
139
141
|
### Web (`packages/web/`)
|
|
140
142
|
|
|
@@ -148,7 +150,7 @@ web/src/services/
|
|
|
148
150
|
|
|
149
151
|
### 1. μν°ν° μμ±
|
|
150
152
|
|
|
151
|
-
1. API μλ² μμ ν Sonamu UI μ΄κΈ° (http://localhost:
|
|
153
|
+
1. API μλ² μμ ν Sonamu UI μ΄κΈ° (http://localhost:34900/sonamu-ui)
|
|
152
154
|
2. **Entities** ν β **"+ Entity"** ν΄λ¦
|
|
153
155
|
3. μν°ν° μ 보 μ
λ ₯ (μ΄λ¦, νλ λ±)
|
|
154
156
|
4. **Create** ν΄λ¦ - νμΌμ΄ μλμΌλ‘ μμ±λ©λλ€!
|
|
@@ -224,6 +226,118 @@ pnpm seed
|
|
|
224
226
|
pnpm sonamu fixture sync
|
|
225
227
|
```
|
|
226
228
|
|
|
229
|
+
---
|
|
230
|
+
|
|
231
|
+
## π€ AI κ°λ° λμ°λ―Έ (Skills)
|
|
232
|
+
|
|
233
|
+
μ΄ νλ‘μ νΈλ **Claude Code**μ ν¨κ» μ¬μ©νλλ‘ κ΅¬μ±λμ΄ μμ΅λλ€. `.claude/skills/sonamu` λλ ν 리μλ Sonamu νλ μμν¬ μ¬μ©λ²μ Claudeκ° μ΄ν΄ν μ μλλ‘ λλ μ§μ λ² μ΄μ€κ° ν¬ν¨λμ΄ μμ΅λλ€.
|
|
234
|
+
|
|
235
|
+
### Skills λλ ν 리 ꡬ쑰
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
.claude/
|
|
239
|
+
βββ skills/
|
|
240
|
+
β βββ sonamu/ # 곡μ Sonamu Skills (μλ λκΈ°ν)
|
|
241
|
+
β β βββ api.md
|
|
242
|
+
β β βββ entity-basic.md
|
|
243
|
+
β β βββ model.md
|
|
244
|
+
β β βββ puri.md
|
|
245
|
+
β β βββ ...
|
|
246
|
+
β βββ local/ # νλ‘μ νΈλ³ 컀μ€ν
Skills
|
|
247
|
+
β βββ my-skill.md
|
|
248
|
+
βββ CLAUDE.md # νλ‘μ νΈ AI κ°μ΄λ (Sonamu μΉμ
ν¬ν¨)
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Skills μ΅μ ν
|
|
252
|
+
|
|
253
|
+
Sonamu μ
λ°μ΄νΈ ν μ΅μ Skillsλ₯Ό λ°μνλ €λ©΄:
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
pnpm sonamu skills sync
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
μ΄ λͺ
λ Ήμ:
|
|
260
|
+
- μ΅μ 곡μ Skillsλ₯Ό `.claude/skills/sonamu`λ‘ λκΈ°ν
|
|
261
|
+
- `CLAUDE.md`μ Sonamu κ΄λ ¨ μΉμ
μ μ
λ°μ΄νΈ
|
|
262
|
+
|
|
263
|
+
### 컀μ€ν
Skill μμ±
|
|
264
|
+
|
|
265
|
+
νλ‘μ νΈ κ°λ° μ€ λ°κ²¬ν ν΄κ²° λ°©λ²μ΄λ νμ Skillλ‘ μ μ₯ν μ μμ΅λλ€:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
pnpm sonamu skills create migration-helper
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
μμ±λ `.claude/skills/local/migration-helper.md` νμΌμ νΈμ§:
|
|
272
|
+
|
|
273
|
+
```markdown
|
|
274
|
+
---
|
|
275
|
+
name: migration-helper
|
|
276
|
+
category: other
|
|
277
|
+
created_at: 2026-02-03
|
|
278
|
+
status: draft
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
# λ§μ΄κ·Έλ μ΄μ
FK μμ λ¬Έμ ν΄κ²°
|
|
282
|
+
|
|
283
|
+
## μν©
|
|
284
|
+
|
|
285
|
+
λ§μ΄κ·Έλ μ΄μ
μμ μΈλν€λ₯Ό μΆκ°ν λ ν
μ΄λΈ μμ± μμκ° λ§μ§ μμ μλ¬ λ°μ
|
|
286
|
+
|
|
287
|
+
## ν΄κ²° λ°©λ²
|
|
288
|
+
|
|
289
|
+
μ°Έμ‘°λλ ν
μ΄λΈμ λ¨Όμ μμ±νκ³ , μ°Έμ‘°νλ ν
μ΄λΈμ λμ€μ μμ±
|
|
290
|
+
|
|
291
|
+
## μ½λ μμ
|
|
292
|
+
|
|
293
|
+
\`\`\`typescript
|
|
294
|
+
// 1. users ν
μ΄λΈ λ¨Όμ μμ±
|
|
295
|
+
await knex.schema.createTable('users', ...)
|
|
296
|
+
|
|
297
|
+
// 2. posts ν
μ΄λΈ λμ€μ μμ± (users μ°Έμ‘°)
|
|
298
|
+
await knex.schema.createTable('posts', (table) => {
|
|
299
|
+
table.integer('user_id').references('users.id')
|
|
300
|
+
})
|
|
301
|
+
\`\`\`
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**νμΌλͺ
κ·μΉ**:
|
|
305
|
+
- μλμΌλ‘ μμ ν μ΄λ¦μΌλ‘ λ³νλ©λλ€
|
|
306
|
+
- μ: `"bug fix"` β `bug-fix.md`
|
|
307
|
+
- μ: `"λ§μ΄κ·Έλ μ΄μ
/ν¬νΌ"` β `λ§μ΄κ·Έλ μ΄μ
-ν¬νΌ.md`
|
|
308
|
+
|
|
309
|
+
### μ£Όμ Skills
|
|
310
|
+
|
|
311
|
+
| Skill | μ€λͺ
|
|
|
312
|
+
|-------|------|
|
|
313
|
+
| **project-init** | νλ‘μ νΈ μμ± λ° μ΄κΈ°ν |
|
|
314
|
+
| **entity-basic** | Entity μμ±/μμ κΈ°λ³Έ |
|
|
315
|
+
| **entity-relations** | Entity κ΄κ³ μ μ (BelongsToOne, HasMany λ±) |
|
|
316
|
+
| **model** | Model ν΄λμ€ μμ± ν¨ν΄ |
|
|
317
|
+
| **api** | @api λ°μ½λ μ΄ν°λ‘ API λ
ΈμΆ |
|
|
318
|
+
| **puri** | νμ
μμ 쿼리 λΉλ μ¬μ©λ² |
|
|
319
|
+
| **subset** | API μλ΅ νλ λ²μ μ μ |
|
|
320
|
+
| **upsert** | κ΄κ³ λ°μ΄ν° μ μ₯ (UpsertBuilder) |
|
|
321
|
+
| **testing** | ν
μ€νΈ μμ± (bootstrap, test, testAs) |
|
|
322
|
+
| **migration** | λ°μ΄ν°λ² μ΄μ€ λ§μ΄κ·Έλ μ΄μ
|
|
|
323
|
+
| **frontend** | νλ‘ νΈμλμμ API νΈμΆ |
|
|
324
|
+
| **i18n** | λ€κ΅μ΄ μ§μ |
|
|
325
|
+
| **workflow** | μ 체 κ°λ° μν¬νλ‘μ° |
|
|
326
|
+
|
|
327
|
+
### Claude Code μ¬μ© μμ
|
|
328
|
+
|
|
329
|
+
Skillsκ° μ€μ λμ΄ μμΌλ―λ‘ Claudeμκ² λ€μκ³Ό κ°μ΄ μμ²ν μ μμ΅λλ€:
|
|
330
|
+
|
|
331
|
+
```
|
|
332
|
+
"User μν°ν°λ₯Ό μμ±νκ³ CRUD APIλ₯Ό λ§λ€μ΄μ€"
|
|
333
|
+
"Postμ Commentμ κ΄κ³λ₯Ό μ€μ ν΄μ€"
|
|
334
|
+
"API ν
μ€νΈ μ½λλ₯Ό μμ±ν΄μ€"
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Claudeλ `.claude/skills/sonamu`μ μ§μμ νμ©νμ¬ Sonamu λ°©μμ λ§λ μ½λλ₯Ό μμ±ν©λλ€.
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
227
341
|
## λ°μ΄ν°λ² μ΄μ€
|
|
228
342
|
|
|
229
343
|
### Docker μ΄λ―Έμ§
|
|
@@ -267,8 +381,8 @@ pnpm sonamu fixture sync
|
|
|
267
381
|
|
|
268
382
|
## π λ μμ보기
|
|
269
383
|
|
|
270
|
-
- [Sonamu λ¬Έμ](https://
|
|
271
|
-
- [Sonamu GitHub](https://github.com/
|
|
384
|
+
- [Sonamu λ¬Έμ](https://sonamu.cartanova.ai)
|
|
385
|
+
- [Sonamu GitHub](https://github.com/cartanova-ai/sonamu)
|
|
272
386
|
- [Fastify λ¬Έμ](https://www.fastify.io/)
|
|
273
387
|
- [TanStack Router](https://tanstack.com/router)
|
|
274
388
|
- [TanStack Query](https://tanstack.com/query)
|
|
@@ -32,13 +32,14 @@
|
|
|
32
32
|
"@swc/core": "^1.13.5",
|
|
33
33
|
"ai": "^6.0.1",
|
|
34
34
|
"bcrypt": "^6.0.0",
|
|
35
|
+
"better-auth": "^1.4.18",
|
|
35
36
|
"chalk": "^4.1.2",
|
|
36
37
|
"date-fns": "^4.1.0",
|
|
37
38
|
"dotenv": "^16",
|
|
38
39
|
"knex": "^3.1.0",
|
|
39
40
|
"pg": "^8.16.3",
|
|
40
41
|
"radashi": "^12.2.0",
|
|
41
|
-
"sonamu": "^0.7.
|
|
42
|
+
"sonamu": "^0.7.51",
|
|
42
43
|
"zod": "^4.3.6"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
@@ -45,32 +45,26 @@ export default defineConfig({
|
|
|
45
45
|
root: path.join(import.meta.dirname, "/../", "public"),
|
|
46
46
|
prefix: "/api/public",
|
|
47
47
|
},
|
|
48
|
-
session: {
|
|
49
|
-
secret: process.env.SESSION_SECRET || "sonamu-secret-key-change-this-in-production",
|
|
50
|
-
salt: process.env.SESSION_SALT || "mq9hDxBCDbsQDR6N",
|
|
51
|
-
cookie: {
|
|
52
|
-
domain: "localhost",
|
|
53
|
-
path: "/",
|
|
54
|
-
maxAge: 60 * 60 * 24 * 365 * 10,
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
48
|
custom: (_server) => {
|
|
58
49
|
// nothing yet
|
|
59
50
|
},
|
|
60
51
|
},
|
|
61
|
-
|
|
62
|
-
auth:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
|
|
53
|
+
auth:{
|
|
54
|
+
emailAndPassword: { enabled: true },
|
|
55
|
+
baseURL: process.env.BETTER_AUTH_URL ?? `http://${host}:${port}`,
|
|
56
|
+
secret: process.env.BETTER_AUTH_SECRET ?? "miomock-secret-key-change-this-in-production",
|
|
57
|
+
trustedOrigins: ["http://localhost:5173"],
|
|
58
|
+
session: {
|
|
59
|
+
expiresIn: 60 * 60 * 24 * 365,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
67
62
|
|
|
68
63
|
apiConfig: {
|
|
69
64
|
contextProvider: (defaultContext, request) => {
|
|
70
65
|
return {
|
|
71
66
|
...defaultContext,
|
|
72
67
|
ip: request.ip,
|
|
73
|
-
session: request.session,
|
|
74
68
|
body: request.body,
|
|
75
69
|
};
|
|
76
70
|
},
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/** biome-ignore-all lint/correctness/noUnusedImports: d.ts */
|
|
2
2
|
|
|
3
|
-
import type { Session } from "@fastify/secure-session";
|
|
4
3
|
import {} from "sonamu";
|
|
5
4
|
|
|
6
5
|
declare module "sonamu" {
|
|
7
6
|
export interface ContextExtend {
|
|
8
7
|
ip: string;
|
|
9
|
-
session: Session;
|
|
10
8
|
}
|
|
11
9
|
|
|
12
10
|
export interface GuardKeys {
|