feat: 定义 UserRepository 接口及 User 数据模型
This commit is contained in:
46
backend/internal/store/user.go
Normal file
46
backend/internal/store/user.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrUserNotFound = errors.New("user not found")
|
||||||
|
ErrUsernameTaken = errors.New("username already taken")
|
||||||
|
ErrRefreshTokenNotFound = errors.New("refresh token not found")
|
||||||
|
)
|
||||||
|
|
||||||
|
// UserRepository 用户持久化接口。
|
||||||
|
type UserRepository interface {
|
||||||
|
// Create 创建用户,返回生成的 ID。
|
||||||
|
Create(ctx context.Context, username, passwordHash string) (string, error)
|
||||||
|
|
||||||
|
// FindByUsername 按用户名查找,不存在返回 ErrUserNotFound。
|
||||||
|
FindByUsername(ctx context.Context, username string) (*User, error)
|
||||||
|
|
||||||
|
// FindByID 按 ID 查找,不存在返回 ErrUserNotFound。
|
||||||
|
FindByID(ctx context.Context, id string) (*User, error)
|
||||||
|
|
||||||
|
// SaveRefreshToken 保存 refresh token hash。
|
||||||
|
SaveRefreshToken(ctx context.Context, userID, tokenHash string, expiresAt time.Time) error
|
||||||
|
|
||||||
|
// FindRefreshToken 按 token hash 查找,返回 user_id。不存在返回 ErrRefreshTokenNotFound。
|
||||||
|
FindRefreshToken(ctx context.Context, tokenHash string) (string, error)
|
||||||
|
|
||||||
|
// DeleteRefreshToken 按 token hash 删除。
|
||||||
|
DeleteRefreshToken(ctx context.Context, tokenHash string) error
|
||||||
|
|
||||||
|
// DeleteUserRefreshTokens 删除用户的所有 refresh token(登出所有设备)。
|
||||||
|
DeleteUserRefreshTokens(ctx context.Context, userID string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// User 用户数据模型(store 层)。
|
||||||
|
type User struct {
|
||||||
|
ID string
|
||||||
|
Username string
|
||||||
|
PasswordHash string
|
||||||
|
CreatedAt time.Time
|
||||||
|
UpdatedAt time.Time
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user