@@ -33,13 +33,13 @@ export type NewUser = Insertable<UsersTable>
33
33
export type UserUpdate = Updateable < UsersTable >
34
34
35
35
export class UserModel {
36
- private userData : Partial < UserType >
36
+ private user : Partial < UserType >
37
37
38
38
// TODO: this hidden functionality needs to be implemented still
39
39
private hidden = [ 'password' ]
40
40
41
- constructor ( userData : Partial < UserType > ) {
42
- this . userData = userData
41
+ constructor ( user : Partial < UserType > ) {
42
+ this . user = user
43
43
}
44
44
45
45
// Method to find a user by ID
@@ -51,12 +51,12 @@ export class UserModel {
51
51
else
52
52
query = query . selectAll ( )
53
53
54
- const userData = await query . executeTakeFirst ( )
54
+ const user = await query . executeTakeFirst ( )
55
55
56
- if ( ! userData )
56
+ if ( ! user )
57
57
return null
58
58
59
- return new UserModel ( userData )
59
+ return new UserModel ( user )
60
60
}
61
61
62
62
// Method to get a user by criteria
@@ -117,15 +117,15 @@ export class UserModel {
117
117
118
118
// Method to find a user by email
119
119
static async findByEmail ( email : string ) : Promise < UserModel | null > {
120
- const userData = await db . selectFrom ( 'users' )
120
+ const user = await db . selectFrom ( 'users' )
121
121
. where ( 'email' , '=' , email )
122
122
. selectAll ( )
123
123
. executeTakeFirst ( )
124
124
125
- if ( ! userData )
125
+ if ( ! user )
126
126
return null
127
127
128
- return new UserModel ( userData )
128
+ return new UserModel ( user )
129
129
}
130
130
131
131
async where ( criteria : Partial < UserType > ) {
@@ -172,78 +172,86 @@ export class UserModel {
172
172
173
173
// Method to get the user instance data
174
174
get ( ) {
175
- return this . userData
175
+ return this . user
176
176
}
177
177
178
178
// Method to update the user instance
179
- async update ( userUpdate : UserUpdate ) : Promise < Result < UserType , Error > > {
180
- if ( this . userData . id === undefined )
179
+ async update ( user : UserUpdate ) : Promise < Result < UserType , Error > > {
180
+ if ( this . user . id === undefined )
181
181
return err ( handleError ( 'User ID is undefined' ) )
182
182
183
183
const updatedUser = await db . updateTable ( 'users' )
184
- . set ( userUpdate )
185
- . where ( 'id' , '=' , this . userData . id )
184
+ . set ( user )
185
+ . where ( 'id' , '=' , this . user . id )
186
186
. returningAll ( )
187
187
. executeTakeFirst ( )
188
188
189
189
if ( ! updatedUser )
190
190
return err ( handleError ( 'User not found' ) )
191
191
192
- this . userData = updatedUser
192
+ this . user = updatedUser
193
193
194
194
return ok ( updatedUser )
195
195
}
196
196
197
197
// Method to save (insert or update) the user instance
198
198
async save ( ) : Promise < void > {
199
- if ( this . userData . id === undefined ) {
199
+ if ( ! this . user )
200
+ throw new Error ( 'User data is undefined' )
201
+
202
+ if ( this . user . id === undefined ) {
200
203
// Insert new user
201
204
const newUser = await db . insertInto ( 'users' )
202
- . values ( this . userData )
205
+ . values ( this . user )
203
206
. returningAll ( )
204
207
. executeTakeFirstOrThrow ( )
205
- this . userData = newUser
208
+ this . user = newUser
206
209
}
207
210
else {
208
211
// Update existing user
209
- await this . update ( this . userData as UserUpdate )
212
+ await this . update ( this . user )
210
213
}
211
214
}
212
215
213
216
// Method to delete the user instance
214
217
async delete ( ) : Promise < void > {
215
- if ( this . userData . id === undefined )
218
+ if ( this . user . id === undefined )
216
219
throw new Error ( 'User ID is undefined' )
217
220
218
221
await db . deleteFrom ( 'users' )
219
- . where ( 'id' , '=' , this . userData . id )
222
+ . where ( 'id' , '=' , this . user . id )
220
223
. execute ( )
221
- this . userData = { }
224
+
225
+ this . user = { }
222
226
}
223
227
224
228
// Method to refresh the user instance data from the database
225
229
async refresh ( ) : Promise < void > {
226
- if ( this . userData . id === undefined )
230
+ if ( this . user . id === undefined )
227
231
throw new Error ( 'User ID is undefined' )
228
232
229
233
const refreshedUser = await db . selectFrom ( 'users' )
230
- . where ( 'id' , '=' , this . userData . id )
234
+ . where ( 'id' , '=' , this . user . id )
231
235
. selectAll ( )
232
236
. executeTakeFirst ( )
233
237
234
238
if ( ! refreshedUser )
235
239
throw new Error ( 'User not found' )
236
240
237
- this . userData = refreshedUser
241
+ this . user = refreshedUser
238
242
}
239
243
240
244
toJSON ( ) {
241
- const output : Partial < UserType > = { ...this . userData }
245
+ const output : Partial < UserType > = { ...this . user }
246
+
242
247
this . hidden . forEach ( ( attr ) => {
243
248
if ( attr in output )
244
249
delete output [ attr as keyof Partial < UserType > ]
245
250
} )
246
- return output
251
+
252
+ type User = Omit < UserType , 'password' >
253
+
254
+ return output as User
247
255
}
248
256
}
249
257
@@ -258,12 +266,12 @@ export async function find(id: number, fields?: (keyof UserType)[]) {
258
266
else
259
267
query = query . selectAll ( )
260
268
261
- const userData = await query . executeTakeFirst ( )
269
+ const user = await query . executeTakeFirst ( )
262
270
263
- if ( ! userData )
271
+ if ( ! user )
264
272
return null
265
273
266
- return new UserModel ( userData )
274
+ return new UserModel ( user )
267
275
}
268
276
269
277
export async function get ( criteria : Partial < UserType > , sort : { column : keyof UserType , order : 'asc' | 'desc' } = { column : 'created_at' , order : 'desc' } ) {
0 commit comments