-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathprisma.ts
265 lines (218 loc) · 6.35 KB
/
prisma.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
// * log all database queries (good for debugging)
// const prisma = new PrismaClient({
// log: ['query', 'info', 'warn'],
// })
// ===============================================
async function main() {
// ! For Testing - delete all users before (only use for this example)
await prisma.user.deleteMany()
// ---------------------------------------------
// * CREATE
const createUser = await prisma.user.create({
data: {
name: 'Pam',
email: '[email protected]',
age: 26,
// * Create a userPreference object at the same time. (relation)
userPreference: {
create: {
emailUpdates: true,
},
},
},
// * Include the userPreference object in the response
// include: {
// userPreference: true,
// },
// * Only show the name and the id of userPreference in the response
select: {
name: true,
userPreference: { select: { id: true } },
},
})
const createUsers = await prisma.user.createMany({
data: [
{
name: 'Michael',
email: '[email protected]',
age: 41,
},
{
name: 'Dwight',
email: '[email protected]',
age: 35,
},
],
// ? You can't use include or select with createMany
})
// ``````````````````````````````````````````````
console.log('createUser', createUser)
// { name: 'Pam', userPreference: { id: 1 } }
console.log('createUsers', createUsers)
// { count: 2 }
// ----------------------------------------------
// * UPDATE
// Update One
// const updateOne = await prisma.user.update({
// where: {
// email: '[email protected]',
// },
// data: {
// age: {
// increment: 1, // ? increment, decrement, multiply, divide, append, prepend, delete, remove, disconnect, connect, set
// },
// },
// })
// Update Many
// const updateMany = await prisma.user.updateMany({
// where: {
// age: { gt: 40 },
// },
// data: {
// email: '[email protected]',
// },
// })
// * CONNECT, DISCONNECT, SET
// const connect = await prisma.user.update({
// where: {
// email: '[email protected]',
// },
// data: {
// userPreference: {
// connect: {
// id: '9c7c2634-5cab-428d-8ca8-0db26bc3c684', // ? userPreferenceId from pam
// },
// },
// },
// })
// const disconnect = await prisma.user.update({
// where: {
// email: '[email protected]',
// },
// data: {
// userPreference: {
// disconnect: true, // ? now pam's userPreference is null
// },
// },
// })
// ``````````````````````````````````````````````
// console.log('updateOne', updateOne)
// console.log('updateMany', updateMany)
// console.log('connect', connect)
// console.log('disconnect', disconnect)
// ----------------------------------------------
// * DELETE
// * delete all
// const deleteAll = await prisma.user.deleteMany()
// * delete many that match a condition
// const deleteAllUsersAged40Plus = await prisma.user.deleteMany({
// where: {
// age: { gt: 40 },
// },
// })
// * delete one
// You need a unique identifier to delete one (you can setup a unique identifier in the schema.prisma file by adding @unique to the field)
// const deleteOne = await prisma.user.delete({
// where: {
// email: '[email protected]',
// },
// })
// ``````````````````````````````````````````````
// console.log('deleteAll', deleteAll)
// console.log('deleteAllUsersAged40Plus', deleteAllUsersAged40Plus)
// console.log('deleteOne', deleteOne)
// ---------------------------------------------
// * READ
// * find all users
const findUsers = await prisma.user.findMany()
// * find one user by an unique field (email)
const findUser = await prisma.user.findUnique({
where: {
email: '[email protected]',
},
})
// * find user by multiple unique fields that we specified
// ? @@unique([age, name])
const findUserByMultipleUniqueFields = await prisma.user.findUnique({
where: {
age_name: {
age: 26,
name: 'Pam',
},
},
})
// * find users, sort and limit results
const findSortAndLimitResults = await prisma.user.findMany({
take: 2, // limit
skip: 1, // skip
orderBy: {
age: 'desc', // sort
},
})
// ? findFirst - find a user by any field that is not unique
// ? distinct - return only distinct results (only first occurence of each result with a particular field)
// ````````````````````````````````````````````
// CHECK HOW MANY USERS ARE IN THE DATABASE
// you can also use this to check how many results you get from a query
console.log('Users length', findUsers.length)
console.log('findUsers', findUsers)
console.log('findUser', findUser)
console.log('findUserByMultipleUniqueFields', findUserByMultipleUniqueFields)
console.log('findSortAndLimitResults', findSortAndLimitResults)
// ---------------------------------------------
// * FILTERS
// * not
const notFilter = await prisma.user.findMany({
where: {
name: { not: 'Pam' },
},
})
// * in, notIn
const inFilter = await prisma.user.findMany({
where: {
name: { in: ['Pam', 'Dwight'] },
},
})
// * lt, lte, gt, gte
const ltFilter = await prisma.user.findMany({
where: {
age: { lt: 30 },
},
})
// * contains, startsWith, endsWith
const containsFilter = await prisma.user.findMany({
where: {
name: { contains: 'a' },
},
})
// * AND, OR, NOT
const andFilter = await prisma.user.findMany({
where: {
AND: [{ name: 'Pam' }, { age: { lt: 30 } }],
},
})
// ARRAY FILTERING
// * some, none, every
// ! hypothetical example
// const someFilter = await prisma.user.findMany({
// where: {
// posts: {
// some: {
// title: 'Hello World',
// },
// },
// },
// })
// ````````````````````````````````````````````
console.log('notFilter', notFilter)
console.log('inFilter', inFilter)
console.log('ltFilter', ltFilter)
console.log('containsFilter', containsFilter)
console.log('andFilter', andFilter)
}
// ===============================================
main()
.catch((e) => console.error(e.message))
.finally(async () => await prisma.$disconnect())