@kood/claude-code 0.1.2 → 0.1.3
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/dist/index.js +12 -3
- package/package.json +2 -2
- package/templates/hono/CLAUDE.md +20 -2
- package/templates/hono/docs/architecture/architecture.md +909 -0
- package/templates/hono/docs/deployment/cloudflare.md +537 -190
- package/templates/hono/docs/deployment/docker.md +517 -0
- package/templates/hono/docs/deployment/index.md +181 -213
- package/templates/hono/docs/deployment/railway.md +416 -0
- package/templates/hono/docs/deployment/vercel.md +572 -0
- package/templates/hono/docs/git/git.md +285 -0
- package/templates/hono/docs/library/ai-sdk/index.md +427 -0
- package/templates/hono/docs/library/ai-sdk/openrouter.md +479 -0
- package/templates/hono/docs/library/ai-sdk/providers.md +468 -0
- package/templates/hono/docs/library/ai-sdk/streaming.md +447 -0
- package/templates/hono/docs/library/ai-sdk/structured-output.md +493 -0
- package/templates/hono/docs/library/ai-sdk/tools.md +513 -0
- package/templates/hono/docs/library/hono/env-setup.md +458 -0
- package/templates/hono/docs/library/hono/index.md +1 -0
- package/templates/hono/docs/library/pino/index.md +437 -0
- package/templates/hono/docs/library/prisma/cloudflare-d1.md +503 -0
- package/templates/hono/docs/library/prisma/config.md +362 -0
- package/templates/hono/docs/library/prisma/index.md +86 -13
- package/templates/hono/docs/skills/gemini-review/SKILL.md +116 -116
- package/templates/hono/docs/skills/gemini-review/references/checklists.md +125 -125
- package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +191 -191
- package/templates/npx/CLAUDE.md +309 -0
- package/templates/npx/docs/git/git.md +307 -0
- package/templates/npx/docs/library/commander/index.md +164 -0
- package/templates/npx/docs/library/fs-extra/index.md +171 -0
- package/templates/npx/docs/library/prompts/index.md +253 -0
- package/templates/npx/docs/mcp/index.md +60 -0
- package/templates/npx/docs/skills/gemini-review/SKILL.md +220 -0
- package/templates/npx/docs/skills/gemini-review/references/checklists.md +134 -0
- package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +301 -0
- package/templates/tanstack-start/CLAUDE.md +43 -5
- package/templates/tanstack-start/docs/architecture/architecture.md +134 -4
- package/templates/tanstack-start/docs/deployment/cloudflare.md +234 -51
- package/templates/tanstack-start/docs/deployment/index.md +322 -32
- package/templates/tanstack-start/docs/deployment/nitro.md +201 -20
- package/templates/tanstack-start/docs/deployment/railway.md +305 -153
- package/templates/tanstack-start/docs/deployment/vercel.md +353 -78
- package/templates/tanstack-start/docs/git/{index.md → git.md} +81 -7
- package/templates/tanstack-start/docs/guides/best-practices.md +203 -1
- package/templates/tanstack-start/docs/guides/env-setup.md +450 -0
- package/templates/tanstack-start/docs/library/ai-sdk/hooks.md +472 -0
- package/templates/tanstack-start/docs/library/ai-sdk/index.md +264 -0
- package/templates/tanstack-start/docs/library/ai-sdk/openrouter.md +371 -0
- package/templates/tanstack-start/docs/library/ai-sdk/providers.md +403 -0
- package/templates/tanstack-start/docs/library/ai-sdk/streaming.md +320 -0
- package/templates/tanstack-start/docs/library/ai-sdk/structured-output.md +454 -0
- package/templates/tanstack-start/docs/library/ai-sdk/tools.md +473 -0
- package/templates/tanstack-start/docs/library/pino/index.md +320 -0
- package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +404 -0
- package/templates/tanstack-start/docs/library/prisma/config.md +377 -0
- package/templates/tanstack-start/docs/library/prisma/index.md +3 -1
- package/templates/tanstack-start/docs/library/prisma/schema.md +123 -25
- package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +80 -2
- package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +116 -116
- package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +138 -144
- package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +186 -187
- package/templates/hono/docs/git/index.md +0 -180
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
# Prisma - Config 파일 (prisma.config.ts)
|
|
2
|
+
|
|
3
|
+
> **상위 문서**: [Prisma](./index.md)
|
|
4
|
+
|
|
5
|
+
Prisma v7에서 도입된 `prisma.config.ts` 설정 파일입니다.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## ⚠️ 필수: Multi-File 스키마 설정
|
|
10
|
+
|
|
11
|
+
Multi-File 스키마를 사용하려면 **반드시** `prisma.config.ts`에서 스키마 폴더를 지정해야 합니다.
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// prisma.config.ts
|
|
15
|
+
import path from 'node:path'
|
|
16
|
+
import { defineConfig, env } from 'prisma/config'
|
|
17
|
+
|
|
18
|
+
export default defineConfig({
|
|
19
|
+
// Multi-File 스키마 폴더 지정
|
|
20
|
+
schema: path.join('prisma', 'schema'),
|
|
21
|
+
datasource: {
|
|
22
|
+
url: env('DATABASE_URL'),
|
|
23
|
+
},
|
|
24
|
+
})
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 파일 위치 및 이름
|
|
30
|
+
|
|
31
|
+
### 지원되는 파일명
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
prisma.config.ts # 권장 (소규모 프로젝트)
|
|
35
|
+
prisma.config.js
|
|
36
|
+
prisma.config.mjs
|
|
37
|
+
prisma.config.cjs
|
|
38
|
+
prisma.config.mts
|
|
39
|
+
prisma.config.cts
|
|
40
|
+
|
|
41
|
+
.config/prisma.ts # 권장 (대규모 프로젝트)
|
|
42
|
+
.config/prisma.js
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 권장 위치
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
프로젝트/
|
|
49
|
+
├── prisma.config.ts # 프로젝트 루트
|
|
50
|
+
├── prisma/
|
|
51
|
+
│ ├── schema/ # Multi-File 스키마 폴더
|
|
52
|
+
│ │ ├── +base.prisma
|
|
53
|
+
│ │ ├── +enum.prisma
|
|
54
|
+
│ │ └── user.prisma
|
|
55
|
+
│ └── migrations/ # 마이그레이션 폴더
|
|
56
|
+
├── src/
|
|
57
|
+
│ └── index.ts # Hono 앱 진입점
|
|
58
|
+
└── package.json
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 설정 옵션
|
|
64
|
+
|
|
65
|
+
### 전체 옵션 목록
|
|
66
|
+
|
|
67
|
+
| 옵션 | 타입 | 필수 | 설명 |
|
|
68
|
+
|------|------|------|------|
|
|
69
|
+
| `schema` | string | ❌ | 스키마 파일 또는 폴더 경로 |
|
|
70
|
+
| `datasource.url` | string | ✅ | 데이터베이스 연결 URL |
|
|
71
|
+
| `datasource.shadowDatabaseUrl` | string | ❌ | Shadow DB URL |
|
|
72
|
+
| `migrations.path` | string | ❌ | 마이그레이션 폴더 경로 |
|
|
73
|
+
| `migrations.seed` | string | ❌ | 시드 스크립트 명령어 |
|
|
74
|
+
| `migrations.initShadowDb` | string | ❌ | Shadow DB 초기화 SQL |
|
|
75
|
+
| `views.path` | string | ❌ | SQL 뷰 정의 폴더 |
|
|
76
|
+
| `typedSql.path` | string | ❌ | TypedSQL 파일 폴더 |
|
|
77
|
+
| `experimental` | object | ❌ | 실험적 기능 활성화 |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 기본 설정 예시
|
|
82
|
+
|
|
83
|
+
### defineConfig 사용 (권장)
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// prisma.config.ts
|
|
87
|
+
import 'dotenv/config'
|
|
88
|
+
import { defineConfig, env } from 'prisma/config'
|
|
89
|
+
|
|
90
|
+
export default defineConfig({
|
|
91
|
+
// Multi-File 스키마 설정
|
|
92
|
+
schema: 'prisma/schema',
|
|
93
|
+
|
|
94
|
+
// 마이그레이션 설정
|
|
95
|
+
migrations: {
|
|
96
|
+
path: 'prisma/migrations',
|
|
97
|
+
seed: 'tsx prisma/seed.ts',
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
// 데이터베이스 연결
|
|
101
|
+
datasource: {
|
|
102
|
+
url: env('DATABASE_URL'),
|
|
103
|
+
},
|
|
104
|
+
})
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### satisfies 사용
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// prisma.config.ts
|
|
111
|
+
import 'dotenv/config'
|
|
112
|
+
import type { PrismaConfig } from 'prisma'
|
|
113
|
+
import { env } from 'prisma/config'
|
|
114
|
+
|
|
115
|
+
export default {
|
|
116
|
+
schema: 'prisma/schema',
|
|
117
|
+
migrations: {
|
|
118
|
+
path: 'prisma/migrations',
|
|
119
|
+
seed: 'tsx prisma/seed.ts',
|
|
120
|
+
},
|
|
121
|
+
datasource: {
|
|
122
|
+
url: env('DATABASE_URL'),
|
|
123
|
+
},
|
|
124
|
+
} satisfies PrismaConfig
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Multi-File 스키마 설정
|
|
130
|
+
|
|
131
|
+
### 필수 설정
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
// prisma.config.ts
|
|
135
|
+
import path from 'node:path'
|
|
136
|
+
import { defineConfig, env } from 'prisma/config'
|
|
137
|
+
|
|
138
|
+
export default defineConfig({
|
|
139
|
+
// ⚠️ 폴더 경로 지정 (파일이 아님!)
|
|
140
|
+
schema: path.join('prisma', 'schema'),
|
|
141
|
+
datasource: {
|
|
142
|
+
url: env('DATABASE_URL'),
|
|
143
|
+
},
|
|
144
|
+
})
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 폴더 구조
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
prisma/
|
|
151
|
+
├── schema/ # Multi-File 스키마 폴더
|
|
152
|
+
│ ├── +base.prisma # datasource, generator 설정
|
|
153
|
+
│ ├── +enum.prisma # 모든 enum 정의
|
|
154
|
+
│ ├── user.prisma # User 모델
|
|
155
|
+
│ ├── post.prisma # Post 모델
|
|
156
|
+
│ └── ...
|
|
157
|
+
└── migrations/ # ⚠️ datasource와 같은 레벨에 위치
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### +base.prisma 예시
|
|
161
|
+
|
|
162
|
+
```prisma
|
|
163
|
+
// prisma/schema/+base.prisma
|
|
164
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
165
|
+
// Prisma 기본 설정 파일
|
|
166
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
167
|
+
|
|
168
|
+
// 데이터베이스 연결 설정
|
|
169
|
+
datasource db {
|
|
170
|
+
provider = "postgresql"
|
|
171
|
+
url = env("DATABASE_URL")
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Prisma Client 생성 설정
|
|
175
|
+
generator client {
|
|
176
|
+
provider = "prisma-client" // Prisma v7 필수
|
|
177
|
+
output = "../../generated/prisma"
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 환경 변수 설정
|
|
184
|
+
|
|
185
|
+
### dotenv 설치
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
npm install dotenv
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### 환경 변수 사용
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
// prisma.config.ts
|
|
195
|
+
import 'dotenv/config' // ⚠️ 반드시 최상단에 import
|
|
196
|
+
import { defineConfig, env } from 'prisma/config'
|
|
197
|
+
|
|
198
|
+
export default defineConfig({
|
|
199
|
+
schema: 'prisma/schema',
|
|
200
|
+
datasource: {
|
|
201
|
+
url: env('DATABASE_URL'), // 타입 안전한 환경 변수 접근
|
|
202
|
+
},
|
|
203
|
+
})
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### .env 파일
|
|
207
|
+
|
|
208
|
+
```env
|
|
209
|
+
DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 마이그레이션 설정
|
|
215
|
+
|
|
216
|
+
### 시드 스크립트
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
// prisma.config.ts
|
|
220
|
+
import { defineConfig, env } from 'prisma/config'
|
|
221
|
+
|
|
222
|
+
export default defineConfig({
|
|
223
|
+
schema: 'prisma/schema',
|
|
224
|
+
migrations: {
|
|
225
|
+
path: 'prisma/migrations',
|
|
226
|
+
seed: 'tsx prisma/seed.ts', // 시드 명령어
|
|
227
|
+
},
|
|
228
|
+
datasource: {
|
|
229
|
+
url: env('DATABASE_URL'),
|
|
230
|
+
},
|
|
231
|
+
})
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### 시드 파일 예시
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
// prisma/seed.ts
|
|
238
|
+
import { PrismaClient } from '../generated/prisma'
|
|
239
|
+
|
|
240
|
+
const prisma = new PrismaClient()
|
|
241
|
+
|
|
242
|
+
async function main() {
|
|
243
|
+
// 초기 데이터 생성
|
|
244
|
+
await prisma.user.create({
|
|
245
|
+
data: {
|
|
246
|
+
email: 'admin@example.com',
|
|
247
|
+
name: '관리자',
|
|
248
|
+
},
|
|
249
|
+
})
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
main()
|
|
253
|
+
.catch(console.error)
|
|
254
|
+
.finally(() => prisma.$disconnect())
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Cloudflare Workers 설정
|
|
260
|
+
|
|
261
|
+
Cloudflare Workers/D1 환경에서는 추가 설정이 필요합니다.
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
// prisma.config.ts
|
|
265
|
+
import { defineConfig, env } from 'prisma/config'
|
|
266
|
+
|
|
267
|
+
export default defineConfig({
|
|
268
|
+
schema: 'prisma/schema',
|
|
269
|
+
datasource: {
|
|
270
|
+
url: env('DATABASE_URL'),
|
|
271
|
+
},
|
|
272
|
+
})
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
```prisma
|
|
276
|
+
// prisma/schema/+base.prisma
|
|
277
|
+
generator client {
|
|
278
|
+
provider = "prisma-client"
|
|
279
|
+
output = "../../generated/prisma"
|
|
280
|
+
runtime = "workerd" // Cloudflare Workers 런타임
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
datasource db {
|
|
284
|
+
provider = "sqlite" // D1은 SQLite 기반
|
|
285
|
+
url = env("DATABASE_URL")
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## 경로 해석 규칙
|
|
292
|
+
|
|
293
|
+
### 중요 사항
|
|
294
|
+
|
|
295
|
+
- 모든 경로는 **config 파일 위치 기준**으로 해석됩니다
|
|
296
|
+
- CLI 명령어 실행 위치가 아닙니다!
|
|
297
|
+
|
|
298
|
+
### 예시
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
프로젝트/
|
|
302
|
+
├── prisma.config.ts # 여기가 기준!
|
|
303
|
+
├── prisma/
|
|
304
|
+
│ └── schema/
|
|
305
|
+
└── src/
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
// prisma.config.ts
|
|
310
|
+
export default defineConfig({
|
|
311
|
+
// ✅ prisma.config.ts 기준 상대 경로
|
|
312
|
+
schema: 'prisma/schema',
|
|
313
|
+
|
|
314
|
+
// ❌ 이렇게 하지 마세요
|
|
315
|
+
schema: './prisma/schema', // ./ 불필요
|
|
316
|
+
})
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### 커스텀 경로 지정
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
# --config 플래그로 config 파일 위치 지정
|
|
323
|
+
npx prisma validate --config ./path/to/myconfig.ts
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## 전체 설정 예시
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
// prisma.config.ts
|
|
332
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
333
|
+
// Prisma v7 설정 파일
|
|
334
|
+
// Multi-File 스키마 및 마이그레이션 설정
|
|
335
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
336
|
+
import 'dotenv/config'
|
|
337
|
+
import path from 'node:path'
|
|
338
|
+
import { defineConfig, env } from 'prisma/config'
|
|
339
|
+
|
|
340
|
+
export default defineConfig({
|
|
341
|
+
// Multi-File 스키마 폴더
|
|
342
|
+
schema: path.join('prisma', 'schema'),
|
|
343
|
+
|
|
344
|
+
// 마이그레이션 설정
|
|
345
|
+
migrations: {
|
|
346
|
+
path: 'prisma/migrations',
|
|
347
|
+
seed: 'tsx prisma/seed.ts',
|
|
348
|
+
},
|
|
349
|
+
|
|
350
|
+
// 데이터베이스 연결
|
|
351
|
+
datasource: {
|
|
352
|
+
url: env('DATABASE_URL'),
|
|
353
|
+
},
|
|
354
|
+
})
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
---
|
|
358
|
+
|
|
359
|
+
## 관련 문서
|
|
360
|
+
|
|
361
|
+
- [Prisma v7 개요](./index.md)
|
|
362
|
+
- [Cloudflare D1](./cloudflare-d1.md)
|
|
@@ -39,35 +39,106 @@ npm install -D prisma
|
|
|
39
39
|
|
|
40
40
|
## Schema 설정
|
|
41
41
|
|
|
42
|
-
###
|
|
42
|
+
### ⚠️ 필수: Multi-File 구조 사용
|
|
43
|
+
|
|
44
|
+
Prisma 스키마는 **반드시 Multi-File 구조**로 작성합니다.
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
prisma/
|
|
48
|
+
├── schema/
|
|
49
|
+
│ ├── +base.prisma # datasource, generator 설정
|
|
50
|
+
│ ├── +enum.prisma # 모든 enum 정의
|
|
51
|
+
│ ├── user.prisma # User 모델
|
|
52
|
+
│ ├── post.prisma # Post 모델
|
|
53
|
+
│ └── ... # 기타 모델별 파일
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### ⚠️ 필수: 한글 주석 작성
|
|
57
|
+
|
|
58
|
+
**Prisma Multi-File의 모든 요소에 한글 주석을 작성해야 합니다.**
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
✅ 파일별 목적 주석
|
|
62
|
+
✅ 모델별 설명 주석
|
|
63
|
+
✅ 필드별 설명 주석 (용도가 명확하지 않은 경우)
|
|
64
|
+
✅ 관계 설명 주석
|
|
65
|
+
✅ enum 값 설명 주석
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Multi-File 스키마 예시
|
|
69
|
+
|
|
70
|
+
#### +base.prisma (기본 설정)
|
|
43
71
|
|
|
44
72
|
```prisma
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
73
|
+
// prisma/schema/+base.prisma
|
|
74
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
75
|
+
// Prisma 기본 설정 파일
|
|
76
|
+
// datasource 및 generator 설정
|
|
77
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
49
78
|
|
|
79
|
+
// 데이터베이스 연결 설정
|
|
50
80
|
datasource db {
|
|
51
81
|
provider = "postgresql"
|
|
52
82
|
url = env("DATABASE_URL")
|
|
53
83
|
}
|
|
54
84
|
|
|
85
|
+
// Prisma Client 생성 설정
|
|
86
|
+
generator client {
|
|
87
|
+
provider = "prisma-client" // Prisma v7 필수
|
|
88
|
+
output = "./generated/client"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### +enum.prisma (열거형 정의)
|
|
93
|
+
|
|
94
|
+
```prisma
|
|
95
|
+
// prisma/schema/+enum.prisma
|
|
96
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
97
|
+
// 모든 열거형(enum) 정의 파일
|
|
98
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
99
|
+
|
|
100
|
+
// 사용자 권한 열거형
|
|
101
|
+
enum Role {
|
|
102
|
+
USER // 일반 사용자
|
|
103
|
+
ADMIN // 관리자
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
#### user.prisma (User 모델)
|
|
108
|
+
|
|
109
|
+
```prisma
|
|
110
|
+
// prisma/schema/user.prisma
|
|
111
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
112
|
+
// 사용자 모델
|
|
113
|
+
// 시스템의 모든 사용자 정보를 저장
|
|
114
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
115
|
+
|
|
55
116
|
model User {
|
|
56
117
|
id String @id @default(cuid())
|
|
57
|
-
email String @unique
|
|
58
|
-
name String?
|
|
59
|
-
posts Post[]
|
|
118
|
+
email String @unique // 로그인 이메일 (중복 불가)
|
|
119
|
+
name String? // 표시 이름 (선택)
|
|
120
|
+
posts Post[] // 작성한 게시글 목록
|
|
60
121
|
createdAt DateTime @default(now())
|
|
61
122
|
updatedAt DateTime @updatedAt
|
|
62
123
|
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### post.prisma (Post 모델)
|
|
127
|
+
|
|
128
|
+
```prisma
|
|
129
|
+
// prisma/schema/post.prisma
|
|
130
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
131
|
+
// 게시글 모델
|
|
132
|
+
// 사용자가 작성한 게시글 정보
|
|
133
|
+
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
63
134
|
|
|
64
135
|
model Post {
|
|
65
136
|
id String @id @default(cuid())
|
|
66
|
-
title String
|
|
67
|
-
content String?
|
|
68
|
-
published Boolean @default(false)
|
|
69
|
-
author User @relation(fields: [authorId], references: [id])
|
|
70
|
-
authorId String
|
|
137
|
+
title String // 게시글 제목
|
|
138
|
+
content String? // 게시글 본문 (선택)
|
|
139
|
+
published Boolean @default(false) // 공개 여부
|
|
140
|
+
author User @relation(fields: [authorId], references: [id]) // 작성자 관계
|
|
141
|
+
authorId String // 작성자 ID (외래키)
|
|
71
142
|
createdAt DateTime @default(now())
|
|
72
143
|
updatedAt DateTime @updatedAt
|
|
73
144
|
}
|
|
@@ -422,6 +493,8 @@ export default app
|
|
|
422
493
|
|
|
423
494
|
## 관련 문서
|
|
424
495
|
|
|
496
|
+
- [Config 파일](./config.md) - prisma.config.ts 설정 ⭐
|
|
425
497
|
- [Schema 정의](./schema.md)
|
|
426
498
|
- [Relations](./relations.md)
|
|
427
499
|
- [Transactions](./transactions.md)
|
|
500
|
+
- [Cloudflare D1](./cloudflare-d1.md) - D1 서버리스 데이터베이스 연동
|