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 }