55 lines
1.1 KiB
Go
55 lines
1.1 KiB
Go
package entity
|
||
|
||
import (
|
||
"time"
|
||
)
|
||
|
||
// User 用户领域实体
|
||
type User struct {
|
||
ID string
|
||
Username string
|
||
PasswordHash string
|
||
Email string
|
||
RevokedAfter time.Time // 全局 Token 撤销时间
|
||
CreatedAt time.Time
|
||
UpdatedAt time.Time
|
||
}
|
||
|
||
// NewUser 创建新用户
|
||
func NewUser(username, passwordHash, email string) *User {
|
||
now := time.Now()
|
||
return &User{
|
||
Username: username,
|
||
PasswordHash: passwordHash,
|
||
Email: email,
|
||
RevokedAfter: time.Unix(0, 0), // 初始值:1970-01-01
|
||
CreatedAt: now,
|
||
UpdatedAt: now,
|
||
}
|
||
}
|
||
|
||
// UpdatePassword 更新密码(会触发全局登出)
|
||
func (u *User) UpdatePassword(newPasswordHash string) {
|
||
u.PasswordHash = newPasswordHash
|
||
u.RevokedAfter = time.Now() // 撤销所有旧 Token
|
||
u.UpdatedAt = time.Now()
|
||
}
|
||
|
||
// RevokeAllTokens 撤销所有 Token(强制全局登出)
|
||
func (u *User) RevokeAllTokens() {
|
||
u.RevokedAfter = time.Now()
|
||
u.UpdatedAt = time.Now()
|
||
}
|
||
|
||
// Validate 验证用户数据
|
||
func (u *User) Validate() error {
|
||
if u.Username == "" {
|
||
return ErrInvalidUsername
|
||
}
|
||
if u.PasswordHash == "" {
|
||
return ErrInvalidPassword
|
||
}
|
||
return nil
|
||
}
|
||
|