@kood/claude-code 0.1.6 → 0.1.9

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 (107) hide show
  1. package/dist/index.js +109 -216
  2. package/package.json +8 -2
  3. package/templates/hono/CLAUDE.md +59 -328
  4. package/templates/hono/docs/architecture/architecture.md +93 -747
  5. package/templates/hono/docs/deployment/cloudflare.md +59 -513
  6. package/templates/hono/docs/deployment/docker.md +41 -356
  7. package/templates/hono/docs/deployment/index.md +54 -190
  8. package/templates/hono/docs/deployment/railway.md +36 -306
  9. package/templates/hono/docs/deployment/vercel.md +49 -434
  10. package/templates/hono/docs/library/ai-sdk/index.md +53 -290
  11. package/templates/hono/docs/library/ai-sdk/openrouter.md +19 -387
  12. package/templates/hono/docs/library/ai-sdk/providers.md +28 -394
  13. package/templates/hono/docs/library/ai-sdk/streaming.md +52 -353
  14. package/templates/hono/docs/library/ai-sdk/structured-output.md +63 -395
  15. package/templates/hono/docs/library/ai-sdk/tools.md +62 -431
  16. package/templates/hono/docs/library/hono/env-setup.md +24 -313
  17. package/templates/hono/docs/library/hono/error-handling.md +34 -295
  18. package/templates/hono/docs/library/hono/index.md +29 -121
  19. package/templates/hono/docs/library/hono/middleware.md +21 -188
  20. package/templates/hono/docs/library/hono/rpc.md +40 -341
  21. package/templates/hono/docs/library/hono/validation.md +35 -195
  22. package/templates/hono/docs/library/pino/index.md +42 -333
  23. package/templates/hono/docs/library/prisma/cloudflare-d1.md +64 -367
  24. package/templates/hono/docs/library/prisma/config.md +19 -260
  25. package/templates/hono/docs/library/prisma/index.md +67 -320
  26. package/templates/hono/docs/library/zod/index.md +53 -257
  27. package/templates/npx/CLAUDE.md +62 -274
  28. package/templates/npx/docs/references/patterns.md +160 -0
  29. package/templates/tanstack-start/CLAUDE.md +100 -256
  30. package/templates/tanstack-start/docs/architecture/architecture.md +44 -589
  31. package/templates/tanstack-start/docs/deployment/cloudflare.md +37 -424
  32. package/templates/tanstack-start/docs/deployment/index.md +57 -286
  33. package/templates/tanstack-start/docs/deployment/nitro.md +36 -318
  34. package/templates/tanstack-start/docs/deployment/railway.md +40 -409
  35. package/templates/tanstack-start/docs/deployment/vercel.md +43 -465
  36. package/templates/tanstack-start/docs/design/components.md +77 -311
  37. package/templates/tanstack-start/docs/design/index.md +113 -69
  38. package/templates/tanstack-start/docs/design/safe-area.md +51 -250
  39. package/templates/tanstack-start/docs/design/tailwind-setup.md +45 -359
  40. package/templates/tanstack-start/docs/guides/conventions.md +103 -0
  41. package/templates/tanstack-start/docs/guides/env-setup.md +34 -340
  42. package/templates/tanstack-start/docs/guides/getting-started.md +22 -209
  43. package/templates/tanstack-start/docs/guides/hooks.md +166 -0
  44. package/templates/tanstack-start/docs/guides/routes.md +166 -0
  45. package/templates/tanstack-start/docs/guides/services.md +143 -0
  46. package/templates/tanstack-start/docs/library/better-auth/2fa.md +27 -115
  47. package/templates/tanstack-start/docs/library/better-auth/advanced.md +22 -105
  48. package/templates/tanstack-start/docs/library/better-auth/index.md +17 -66
  49. package/templates/tanstack-start/docs/library/better-auth/plugins.md +11 -88
  50. package/templates/tanstack-start/docs/library/better-auth/session.md +12 -92
  51. package/templates/tanstack-start/docs/library/better-auth/setup.md +9 -91
  52. package/templates/tanstack-start/docs/library/prisma/cloudflare-d1.md +30 -358
  53. package/templates/tanstack-start/docs/library/prisma/config.md +27 -327
  54. package/templates/tanstack-start/docs/library/prisma/crud.md +46 -174
  55. package/templates/tanstack-start/docs/library/prisma/index.md +23 -113
  56. package/templates/tanstack-start/docs/library/prisma/relations.md +31 -153
  57. package/templates/tanstack-start/docs/library/prisma/schema.md +40 -217
  58. package/templates/tanstack-start/docs/library/prisma/setup.md +12 -112
  59. package/templates/tanstack-start/docs/library/prisma/transactions.md +20 -110
  60. package/templates/tanstack-start/docs/library/tanstack-query/index.md +26 -97
  61. package/templates/tanstack-start/docs/library/tanstack-query/invalidation.md +28 -107
  62. package/templates/tanstack-start/docs/library/tanstack-query/optimistic-updates.md +44 -146
  63. package/templates/tanstack-start/docs/library/tanstack-query/use-mutation.md +33 -127
  64. package/templates/tanstack-start/docs/library/tanstack-query/use-query.md +49 -149
  65. package/templates/tanstack-start/docs/library/tanstack-start/auth-patterns.md +19 -112
  66. package/templates/tanstack-start/docs/library/tanstack-start/index.md +33 -80
  67. package/templates/tanstack-start/docs/library/tanstack-start/middleware.md +28 -106
  68. package/templates/tanstack-start/docs/library/tanstack-start/routing.md +21 -118
  69. package/templates/tanstack-start/docs/library/tanstack-start/server-functions.md +34 -246
  70. package/templates/tanstack-start/docs/library/tanstack-start/setup.md +6 -39
  71. package/templates/tanstack-start/docs/library/zod/complex-types.md +32 -156
  72. package/templates/tanstack-start/docs/library/zod/index.md +31 -144
  73. package/templates/tanstack-start/docs/library/zod/transforms.md +20 -129
  74. package/templates/tanstack-start/docs/library/zod/validation.md +39 -155
  75. package/templates/hono/docs/commands/git.md +0 -145
  76. package/templates/hono/docs/mcp/context7.md +0 -106
  77. package/templates/hono/docs/mcp/index.md +0 -176
  78. package/templates/hono/docs/mcp/sequential-thinking.md +0 -101
  79. package/templates/hono/docs/mcp/serena.md +0 -269
  80. package/templates/hono/docs/mcp/sgrep.md +0 -105
  81. package/templates/hono/docs/skills/gemini-review/SKILL.md +0 -220
  82. package/templates/hono/docs/skills/gemini-review/references/checklists.md +0 -136
  83. package/templates/hono/docs/skills/gemini-review/references/prompt-templates.md +0 -303
  84. package/templates/npx/docs/commands/git.md +0 -145
  85. package/templates/npx/docs/mcp/index.md +0 -60
  86. package/templates/npx/docs/skills/gemini-review/SKILL.md +0 -220
  87. package/templates/npx/docs/skills/gemini-review/references/checklists.md +0 -134
  88. package/templates/npx/docs/skills/gemini-review/references/prompt-templates.md +0 -301
  89. package/templates/tanstack-start/docs/commands/git.md +0 -145
  90. package/templates/tanstack-start/docs/design/accessibility.md +0 -433
  91. package/templates/tanstack-start/docs/design/color.md +0 -235
  92. package/templates/tanstack-start/docs/design/spacing.md +0 -341
  93. package/templates/tanstack-start/docs/design/typography.md +0 -324
  94. package/templates/tanstack-start/docs/guides/best-practices.md +0 -950
  95. package/templates/tanstack-start/docs/guides/husky-lint-staged.md +0 -303
  96. package/templates/tanstack-start/docs/guides/prettier.md +0 -189
  97. package/templates/tanstack-start/docs/guides/project-templates.md +0 -710
  98. package/templates/tanstack-start/docs/library/tanstack-query/setup.md +0 -107
  99. package/templates/tanstack-start/docs/library/zod/basic-types.md +0 -186
  100. package/templates/tanstack-start/docs/mcp/context7.md +0 -204
  101. package/templates/tanstack-start/docs/mcp/index.md +0 -177
  102. package/templates/tanstack-start/docs/mcp/sequential-thinking.md +0 -180
  103. package/templates/tanstack-start/docs/mcp/serena.md +0 -269
  104. package/templates/tanstack-start/docs/mcp/sgrep.md +0 -174
  105. package/templates/tanstack-start/docs/skills/gemini-review/SKILL.md +0 -220
  106. package/templates/tanstack-start/docs/skills/gemini-review/references/checklists.md +0 -144
  107. package/templates/tanstack-start/docs/skills/gemini-review/references/prompt-templates.md +0 -292
@@ -1,235 +1,65 @@
1
- # Prisma - Config 파일 (prisma.config.ts)
1
+ # Prisma - Config 파일
2
2
 
3
- > **상위 문서**: [Prisma](./index.md)
3
+ Prisma v7 `prisma.config.ts` 설정.
4
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
- └── package.json
57
- ```
58
-
59
- ---
60
-
61
- ## 설정 옵션
62
-
63
- ### 전체 옵션 목록
64
-
65
- | 옵션 | 타입 | 필수 | 설명 |
66
- |------|------|------|------|
67
- | `schema` | string | ❌ | 스키마 파일 또는 폴더 경로 |
68
- | `datasource.url` | string | ✅ | 데이터베이스 연결 URL |
69
- | `datasource.shadowDatabaseUrl` | string | ❌ | Shadow DB URL |
70
- | `migrations.path` | string | ❌ | 마이그레이션 폴더 경로 |
71
- | `migrations.seed` | string | ❌ | 시드 스크립트 명령어 |
72
- | `migrations.initShadowDb` | string | ❌ | Shadow DB 초기화 SQL |
73
- | `views.path` | string | ❌ | SQL 뷰 정의 폴더 |
74
- | `typedSql.path` | string | ❌ | TypedSQL 파일 폴더 |
75
- | `experimental` | object | ❌ | 실험적 기능 활성화 |
76
-
77
- ---
78
-
79
- ## 기본 설정 예시
80
-
81
- ### defineConfig 사용 (권장)
5
+ ## Multi-File 스키마 (필수)
82
6
 
83
7
  ```typescript
84
8
  // prisma.config.ts
85
9
  import 'dotenv/config'
10
+ import path from 'node:path'
86
11
  import { defineConfig, env } from 'prisma/config'
87
12
 
88
13
  export default defineConfig({
89
- // Multi-File 스키마 설정
90
- schema: 'prisma/schema',
91
-
92
- // 마이그레이션 설정
14
+ schema: path.join('prisma', 'schema'), // 폴더 경로!
93
15
  migrations: {
94
16
  path: 'prisma/migrations',
95
17
  seed: 'tsx prisma/seed.ts',
96
18
  },
97
-
98
- // 데이터베이스 연결
99
19
  datasource: {
100
20
  url: env('DATABASE_URL'),
101
21
  },
102
22
  })
103
23
  ```
104
24
 
105
- ### satisfies 사용
25
+ ## 폴더 구조
106
26
 
107
- ```typescript
108
- // prisma.config.ts
109
- import 'dotenv/config'
110
- import type { PrismaConfig } from 'prisma'
111
- import { env } from 'prisma/config'
112
-
113
- export default {
114
- schema: 'prisma/schema',
115
- migrations: {
116
- path: 'prisma/migrations',
117
- seed: 'tsx prisma/seed.ts',
118
- },
119
- datasource: {
120
- url: env('DATABASE_URL'),
121
- },
122
- } satisfies PrismaConfig
123
27
  ```
124
-
125
- ---
126
-
127
- ## Multi-File 스키마 설정
128
-
129
- ### 필수 설정
130
-
131
- ```typescript
132
- // prisma.config.ts
133
- import path from 'node:path'
134
- import { defineConfig, env } from 'prisma/config'
135
-
136
- export default defineConfig({
137
- // ⚠️ 폴더 경로 지정 (파일이 아님!)
138
- schema: path.join('prisma', 'schema'),
139
- datasource: {
140
- url: env('DATABASE_URL'),
141
- },
142
- })
143
- ```
144
-
145
- ### 폴더 구조
146
-
147
- ```
148
- prisma/
149
- ├── schema/ # Multi-File 스키마 폴더
150
- │ ├── +base.prisma # datasource, generator 설정
151
- │ ├── +enum.prisma # 모든 enum 정의
152
- │ ├── user.prisma # User 모델
153
- │ ├── post.prisma # Post 모델
154
- │ └── ...
155
- └── migrations/ # ⚠️ datasource와 같은 레벨에 위치
28
+ 프로젝트/
29
+ ├── prisma.config.ts
30
+ ├── prisma/
31
+ │ ├── schema/
32
+ │ │ ├── +base.prisma # datasource, generator
33
+ │ │ ├── +enum.prisma # enum 정의
34
+ │ │ └── user.prisma # 모델
35
+ │ └── migrations/
156
36
  ```
157
37
 
158
- ### +base.prisma 예시
38
+ ## +base.prisma
159
39
 
160
40
  ```prisma
161
- // prisma/schema/+base.prisma
162
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
163
- // Prisma 기본 설정 파일
164
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
165
-
166
- // 데이터베이스 연결 설정
167
41
  datasource db {
168
42
  provider = "postgresql"
169
43
  url = env("DATABASE_URL")
170
44
  }
171
45
 
172
- // Prisma Client 생성 설정
173
46
  generator client {
174
- provider = "prisma-client" // Prisma v7 필수
47
+ provider = "prisma-client"
175
48
  output = "../../generated/prisma"
176
49
  }
177
50
  ```
178
51
 
179
- ---
180
-
181
- ## 환경 변수 설정
182
-
183
- ### dotenv 설치
184
-
185
- ```bash
186
- npm install dotenv
187
- ```
188
-
189
- ### 환경 변수 사용
190
-
191
- ```typescript
192
- // prisma.config.ts
193
- import 'dotenv/config' // ⚠️ 반드시 최상단에 import
194
- import { defineConfig, env } from 'prisma/config'
195
-
196
- export default defineConfig({
197
- schema: 'prisma/schema',
198
- datasource: {
199
- url: env('DATABASE_URL'), // 타입 안전한 환경 변수 접근
200
- },
201
- })
202
- ```
203
-
204
- ### .env 파일
205
-
206
- ```env
207
- DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
208
- ```
209
-
210
- ---
211
-
212
- ## 마이그레이션 설정
52
+ ## 설정 옵션
213
53
 
214
- ### 시드 스크립트
54
+ | 옵션 | 설명 |
55
+ |------|------|
56
+ | `schema` | 스키마 폴더 경로 |
57
+ | `datasource.url` | DB URL (필수) |
58
+ | `datasource.shadowDatabaseUrl` | Shadow DB URL |
59
+ | `migrations.path` | 마이그레이션 폴더 |
60
+ | `migrations.seed` | 시드 명령어 |
215
61
 
216
- ```typescript
217
- // prisma.config.ts
218
- import { defineConfig, env } from 'prisma/config'
219
-
220
- export default defineConfig({
221
- schema: 'prisma/schema',
222
- migrations: {
223
- path: 'prisma/migrations',
224
- seed: 'tsx prisma/seed.ts', // 시드 명령어
225
- },
226
- datasource: {
227
- url: env('DATABASE_URL'),
228
- },
229
- })
230
- ```
231
-
232
- ### 시드 파일 예시
62
+ ## 시드 파일
233
63
 
234
64
  ```typescript
235
65
  // prisma/seed.ts
@@ -238,140 +68,10 @@ import { PrismaClient } from '../generated/prisma'
238
68
  const prisma = new PrismaClient()
239
69
 
240
70
  async function main() {
241
- // 초기 데이터 생성
242
71
  await prisma.user.create({
243
- data: {
244
- email: 'admin@example.com',
245
- name: '관리자',
246
- role: 'ADMIN',
247
- },
72
+ data: { email: 'admin@example.com', name: '관리자', role: 'ADMIN' },
248
73
  })
249
74
  }
250
75
 
251
- main()
252
- .catch(console.error)
253
- .finally(() => prisma.$disconnect())
254
- ```
255
-
256
- ---
257
-
258
- ## Shadow Database 설정
259
-
260
- 마이그레이션 시 사용되는 임시 데이터베이스입니다.
261
-
262
- ```typescript
263
- // prisma.config.ts
264
- import { defineConfig, env } from 'prisma/config'
265
-
266
- export default defineConfig({
267
- schema: 'prisma/schema',
268
- datasource: {
269
- url: env('DATABASE_URL'),
270
- shadowDatabaseUrl: env('SHADOW_DATABASE_URL'),
271
- },
272
- })
76
+ main().catch(console.error).finally(() => prisma.$disconnect())
273
77
  ```
274
-
275
- ---
276
-
277
- ## 실험적 기능
278
-
279
- ### External Tables
280
-
281
- 외부에서 관리되는 테이블 설정:
282
-
283
- ```typescript
284
- // prisma.config.ts
285
- import { defineConfig, env } from 'prisma/config'
286
-
287
- export default defineConfig({
288
- schema: 'prisma/schema',
289
- experimental: {
290
- externalTables: true,
291
- },
292
- tables: {
293
- external: ['public.users'],
294
- },
295
- enums: {
296
- external: ['public.role'],
297
- },
298
- datasource: {
299
- url: env('DATABASE_URL'),
300
- },
301
- })
302
- ```
303
-
304
- ---
305
-
306
- ## 경로 해석 규칙
307
-
308
- ### 중요 사항
309
-
310
- - 모든 경로는 **config 파일 위치 기준**으로 해석됩니다
311
- - CLI 명령어 실행 위치가 아닙니다!
312
-
313
- ### 예시
314
-
315
- ```
316
- 프로젝트/
317
- ├── prisma.config.ts # 여기가 기준!
318
- ├── prisma/
319
- │ └── schema/
320
- └── src/
321
- ```
322
-
323
- ```typescript
324
- // prisma.config.ts
325
- export default defineConfig({
326
- // ✅ prisma.config.ts 기준 상대 경로
327
- schema: 'prisma/schema',
328
-
329
- // ❌ 이렇게 하지 마세요
330
- schema: './prisma/schema', // ./ 불필요
331
- })
332
- ```
333
-
334
- ### 커스텀 경로 지정
335
-
336
- ```bash
337
- # --config 플래그로 config 파일 위치 지정
338
- npx prisma validate --config ./path/to/myconfig.ts
339
- ```
340
-
341
- ---
342
-
343
- ## 전체 설정 예시
344
-
345
- ```typescript
346
- // prisma.config.ts
347
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
348
- // Prisma v7 설정 파일
349
- // Multi-File 스키마 및 마이그레이션 설정
350
- // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
351
- import 'dotenv/config'
352
- import path from 'node:path'
353
- import { defineConfig, env } from 'prisma/config'
354
-
355
- export default defineConfig({
356
- // Multi-File 스키마 폴더
357
- schema: path.join('prisma', 'schema'),
358
-
359
- // 마이그레이션 설정
360
- migrations: {
361
- path: 'prisma/migrations',
362
- seed: 'tsx prisma/seed.ts',
363
- },
364
-
365
- // 데이터베이스 연결
366
- datasource: {
367
- url: env('DATABASE_URL'),
368
- },
369
- })
370
- ```
371
-
372
- ---
373
-
374
- ## 관련 문서
375
-
376
- - [스키마 정의 (Multi-File)](./schema.md)
377
- - [설치 및 설정](./setup.md)
@@ -1,218 +1,90 @@
1
1
  # Prisma - CRUD 작업
2
2
 
3
- > **상위 문서**: [Prisma](./index.md)
4
-
5
- ## Create (생성)
6
-
7
- ### 단일 레코드 생성
3
+ ## Create
8
4
 
9
5
  ```typescript
6
+ // 단일
10
7
  const user = await prisma.user.create({
11
- data: {
12
- email: 'alice@prisma.io',
13
- name: 'Alice',
14
- },
8
+ data: { email: 'alice@prisma.io', name: 'Alice' },
15
9
  })
16
- ```
17
-
18
- ### 관계 포함 생성
19
10
 
20
- ```typescript
21
- const userWithPosts = await prisma.user.create({
11
+ // 관계 포함
12
+ const user = await prisma.user.create({
22
13
  data: {
23
14
  email: 'bob@prisma.io',
24
- name: 'Bob',
25
- posts: {
26
- create: [
27
- { title: 'Hello World' },
28
- { title: 'My Second Post' },
29
- ],
30
- },
31
- },
32
- include: {
33
- posts: true,
15
+ posts: { create: [{ title: 'Hello' }, { title: 'World' }] },
34
16
  },
17
+ include: { posts: true },
35
18
  })
36
- ```
37
-
38
- ### connectOrCreate로 깊은 중첩 생성
39
19
 
40
- ```typescript
41
- const user = await prisma.user.create({
42
- include: {
43
- posts: {
44
- include: {
45
- categories: true,
46
- },
47
- },
48
- },
49
- data: {
50
- email: 'emma@prisma.io',
51
- posts: {
52
- create: [
53
- {
54
- title: 'My first post',
55
- categories: {
56
- connectOrCreate: [
57
- {
58
- create: { name: 'Introductions' },
59
- where: { name: 'Introductions' },
60
- },
61
- {
62
- create: { name: 'Social' },
63
- where: { name: 'Social' },
64
- },
65
- ],
66
- },
67
- },
68
- ],
69
- },
70
- },
71
- })
20
+ // connectOrCreate
21
+ posts: { create: [{
22
+ title: 'Post',
23
+ categories: { connectOrCreate: [{ create: { name: 'Tech' }, where: { name: 'Tech' } }] },
24
+ }]}
72
25
  ```
73
26
 
74
- ## Read (조회)
75
-
76
- ### 단일 레코드 조회
27
+ ## Read
77
28
 
78
29
  ```typescript
79
- const user = await prisma.user.findUnique({
80
- where: { email: 'alice@prisma.io' },
81
- })
82
- ```
30
+ // 단일
31
+ const user = await prisma.user.findUnique({ where: { email } })
83
32
 
84
- ### 필터링된 다중 레코드 조회
33
+ // 다중
34
+ const users = await prisma.user.findMany({ where: { name: 'Alice' } })
85
35
 
86
- ```typescript
87
- const users = await prisma.user.findMany({
88
- where: { name: 'Alice' },
89
- })
90
- ```
91
-
92
- ### 관계 포함 조회
36
+ // 관계 포함
37
+ const users = await prisma.user.findMany({ where: { role: 'ADMIN' }, include: { posts: true } })
93
38
 
94
- ```typescript
95
- const users = await prisma.user.findMany({
96
- where: { role: 'ADMIN' },
97
- include: { posts: true },
98
- })
99
- ```
100
-
101
- ### 특정 필드만 선택
102
-
103
- ```typescript
39
+ // 필드 선택
104
40
  const user = await prisma.user.findUnique({
105
- where: { email: 'emma@prisma.io' },
106
- select: {
107
- email: true,
108
- posts: {
109
- select: { likes: true },
110
- },
111
- },
41
+ where: { email },
42
+ select: { email: true, posts: { select: { title: true } } },
112
43
  })
113
- ```
114
-
115
- ### 관계 필드로 필터링
116
44
 
117
- ```typescript
45
+ // 관계로 필터
118
46
  const users = await prisma.user.findMany({
119
- where: {
120
- email: { endsWith: 'prisma.io' },
121
- posts: {
122
- some: { published: false },
123
- },
124
- },
47
+ where: { posts: { some: { published: false } } },
125
48
  })
126
49
  ```
127
50
 
128
- ## Update (수정)
129
-
130
- ### 단일 레코드 수정
51
+ ## Update
131
52
 
132
53
  ```typescript
133
- const user = await prisma.user.update({
134
- where: { email: 'alice@prisma.io' },
135
- data: { name: 'Alice Updated' },
136
- })
137
- ```
54
+ // 단일
55
+ const user = await prisma.user.update({ where: { id }, data: { name: 'Updated' } })
138
56
 
139
- ### 다중 레코드 수정
57
+ // 다중
58
+ await prisma.user.updateMany({ where: { role: 'USER' }, data: { role: 'ADMIN' } })
140
59
 
141
- ```typescript
142
- const updatedUsers = await prisma.user.updateMany({
143
- where: { role: 'USER' },
144
- data: { role: 'ADMIN' },
145
- })
146
- ```
147
-
148
- ### Upsert (있으면 수정, 없으면 생성)
149
-
150
- ```typescript
60
+ // Upsert
151
61
  const user = await prisma.user.upsert({
152
- where: { email: 'alice@prisma.io' },
153
- update: { name: 'Alice Updated' },
154
- create: { email: 'alice@prisma.io', name: 'Alice' },
62
+ where: { email },
63
+ update: { name: 'Updated' },
64
+ create: { email, name: 'New' },
155
65
  })
156
66
  ```
157
67
 
158
- ## Delete (삭제)
159
-
160
- ### 단일 레코드 삭제
68
+ ## Delete
161
69
 
162
70
  ```typescript
163
- const deletedUser = await prisma.user.delete({
164
- where: { email: 'alice@prisma.io' },
165
- })
71
+ await prisma.user.delete({ where: { id } })
72
+ await prisma.user.deleteMany({}) // 전체
73
+ await prisma.post.deleteMany({ where: { published: false } }) // 조건부
166
74
  ```
167
75
 
168
- ### 모든 레코드 삭제
76
+ ## 필터 연산자
169
77
 
170
78
  ```typescript
171
- const deleteUsers = await prisma.user.deleteMany({})
172
- ```
79
+ // 문자열
80
+ { contains: 'prisma', startsWith: 'A', endsWith: 'io' }
173
81
 
174
- ### 조건부 삭제
82
+ // 숫자
83
+ { gt: 18, gte: 18, lt: 65, lte: 65 }
175
84
 
176
- ```typescript
177
- const deletedPosts = await prisma.post.deleteMany({
178
- where: { published: false },
179
- })
180
- ```
85
+ // 배열
86
+ { in: [1, 2, 3], notIn: [4, 5] }
181
87
 
182
- ## 필터 연산자
183
-
184
- ```typescript
185
- // 문자열 필터
186
- where: {
187
- email: { contains: 'prisma' },
188
- name: { startsWith: 'A' },
189
- title: { endsWith: 'guide' },
190
- }
191
-
192
- // 숫자 필터
193
- where: {
194
- age: { gt: 18 }, // greater than
195
- age: { gte: 18 }, // greater than or equal
196
- age: { lt: 65 }, // less than
197
- age: { lte: 65 }, // less than or equal
198
- }
199
-
200
- // 배열 필터
201
- where: {
202
- id: { in: [1, 2, 3] },
203
- id: { notIn: [4, 5, 6] },
204
- }
205
-
206
- // 논리 연산자
207
- where: {
208
- OR: [
209
- { email: { contains: 'prisma' } },
210
- { name: { contains: 'Prisma' } },
211
- ],
212
- AND: [
213
- { published: true },
214
- { authorId: 1 },
215
- ],
216
- NOT: { email: { contains: 'test' } },
217
- }
88
+ // 논리
89
+ { OR: [...], AND: [...], NOT: {...} }
218
90
  ```