1
- import { DateTime } from 'luxon'
2
- import hash from '@adonisjs/core/services/hash'
3
- import { compose } from '@adonisjs/core/helpers'
4
- import { BaseModel , column } from '@adonisjs/lucid/orm'
5
1
import { withAuthFinder } from '@adonisjs/auth/mixins/lucid'
2
+ import { DbRememberMeTokensProvider } from '@adonisjs/auth/session'
3
+ import { compose } from '@adonisjs/core/helpers'
4
+ import hash from '@adonisjs/core/services/hash'
5
+ import { BaseModel , beforeCreate , column , hasMany } from '@adonisjs/lucid/orm'
6
+ import type { HasMany } from '@adonisjs/lucid/types/relations'
7
+ import { DateTime } from 'luxon'
8
+ import { randomUUID } from 'node:crypto'
9
+ import UserToken from './user_token.js'
6
10
7
11
const AuthFinder = withAuthFinder ( ( ) => hash . use ( 'scrypt' ) , {
8
12
uids : [ 'email' ] ,
9
13
passwordColumnName : 'password' ,
10
14
} )
11
15
12
16
export default class User extends compose ( BaseModel , AuthFinder ) {
17
+ static selfAssignPrimaryKey = true
18
+
13
19
@column ( { isPrimary : true } )
14
- declare id : number
20
+ declare id : string
15
21
16
22
@column ( )
17
23
declare fullName : string | null
@@ -22,9 +28,32 @@ export default class User extends compose(BaseModel, AuthFinder) {
22
28
@column ( { serializeAs : null } )
23
29
declare password : string
24
30
31
+ @column ( )
32
+ declare verified : boolean
33
+
25
34
@column . dateTime ( { autoCreate : true } )
26
35
declare createdAt : DateTime
27
36
28
37
@column . dateTime ( { autoCreate : true , autoUpdate : true } )
29
38
declare updatedAt : DateTime | null
39
+
40
+ @hasMany ( ( ) => UserToken )
41
+ declare tokens : HasMany < typeof UserToken >
42
+
43
+ @hasMany ( ( ) => UserToken , {
44
+ onQuery : ( query ) => query . where ( 'type' , 'PASSWORD_RESET' ) ,
45
+ } )
46
+ declare passwordResetToken : HasMany < typeof UserToken >
47
+
48
+ @hasMany ( ( ) => UserToken , {
49
+ onQuery : ( query ) => query . where ( 'type' , 'EMAIL_VERIFICATION' ) ,
50
+ } )
51
+ declare emailVerificationToken : HasMany < typeof UserToken >
52
+
53
+ static readonly rememberMeTokens = DbRememberMeTokensProvider . forModel ( User )
54
+
55
+ @beforeCreate ( )
56
+ static assignUuid ( user : User ) {
57
+ user . id = randomUUID ( )
58
+ }
30
59
}
0 commit comments