合并 main 分支并融合订单列表最小化与 SQL 治理

- Auth/权限中间件取 main 演进版(错误细分、token 来源),保留 dev 的用户 cookie 与登出撤销语义
- 后台订单列表:融合 main 的首页免 COUNT 优化与关键词索引路由,保留 dev 的最小化 AdminOrderListItemDTO(结账明细仍由详情接口返回,同步调整对应集成测试)
- 保留 dev 的 token_version 冻结/解冻递增与 main 的状态变化判断及通知
- 前端:保留 dev 登出接口与 main 的 fetchMe silent 参数、SSE 登录跳转;后台订单表按 dev 最小化 DTO 移除号主到手列
This commit is contained in:
yml2213
2026-09-05 11:43:13 +08:00
294 changed files with 30171 additions and 13439 deletions
+11 -7
View File
@@ -33,6 +33,7 @@ var (
ErrPasswordTooWeak = errors.New("password too weak")
ErrLoginLocked = errors.New("login locked")
ErrUserAlreadyExists = errors.New("user already exists")
ErrTokenVersionMismatch = errors.New("user token version mismatch")
)
const (
@@ -180,7 +181,7 @@ func (s *Service) LoginWithSMS(ctx context.Context, phone string, code string) (
return LoginResult{}, ErrUserDisabled
}
tokens, err := s.issueTokenPair(user)
tokens, err := s.generateUserTokenPair(user)
if err != nil {
return LoginResult{}, err
}
@@ -190,7 +191,7 @@ func (s *Service) LoginWithSMS(ctx context.Context, phone string, code string) (
}
func (s *Service) RefreshToken(ctx context.Context, refreshToken string) (TokenPair, error) {
if s.users == nil {
if s.jwt == nil || s.users == nil {
return TokenPair{}, ErrDependencyUnavailable
}
claims, err := s.jwt.ParseSubject(refreshToken, tokenTypeRefresh, "user")
@@ -201,15 +202,18 @@ func (s *Service) RefreshToken(ctx context.Context, refreshToken string) (TokenP
if err != nil {
return TokenPair{}, err
}
return s.issueTokenPair(user)
return s.generateUserTokenPair(user)
}
func (s *Service) issueTokenPair(user *model.User) (TokenPair, error) {
func (s *Service) generateUserTokenPair(user *model.User) (TokenPair, error) {
if s.jwt == nil {
return TokenPair{}, ErrDependencyUnavailable
}
return s.jwt.GenerateSubjectPairWithVersion(user.ID, user.Phone, "user", user.TokenVersion)
}
func (s *Service) Logout(ctx context.Context, userID uint64) error {
if s.users == nil {
if s.jwt == nil || s.users == nil {
return ErrDependencyUnavailable
}
return s.users.RevokeTokens(ctx, userID)
@@ -282,7 +286,7 @@ func (s *Service) LoginWithPassword(ctx context.Context, phone, password, client
_ = clearLoginFailure(ctx, s.redis, phone, clientIP)
tokens, err := s.issueTokenPair(user)
tokens, err := s.generateUserTokenPair(user)
if err != nil {
return LoginResult{}, err
}
@@ -387,7 +391,7 @@ func (s *Service) RegisterWithPassword(ctx context.Context, phone, code, passwor
return LoginResult{}, ErrUserDisabled
}
tokens, err := s.issueTokenPair(user)
tokens, err := s.generateUserTokenPair(user)
if err != nil {
return LoginResult{}, err
}