f
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"hyapi-server/internal/application/user/dto/commands"
|
||||
"hyapi-server/internal/application/user/dto/queries"
|
||||
"hyapi-server/internal/application/user/dto/responses"
|
||||
api_service "hyapi-server/internal/domains/api/services"
|
||||
finance_service "hyapi-server/internal/domains/finance/services"
|
||||
"hyapi-server/internal/domains/user/entities"
|
||||
"hyapi-server/internal/domains/user/events"
|
||||
@@ -25,6 +26,7 @@ type UserApplicationServiceImpl struct {
|
||||
smsCodeService *user_service.SMSCodeService
|
||||
walletService finance_service.WalletAggregateService
|
||||
contractService user_service.ContractAggregateService
|
||||
apiUserService api_service.ApiUserAggregateService
|
||||
eventBus interfaces.EventBus
|
||||
jwtAuth *middleware.JWTAuthMiddleware
|
||||
logger *zap.Logger
|
||||
@@ -37,6 +39,7 @@ func NewUserApplicationService(
|
||||
smsCodeService *user_service.SMSCodeService,
|
||||
walletService finance_service.WalletAggregateService,
|
||||
contractService user_service.ContractAggregateService,
|
||||
apiUserService api_service.ApiUserAggregateService,
|
||||
eventBus interfaces.EventBus,
|
||||
jwtAuth *middleware.JWTAuthMiddleware,
|
||||
logger *zap.Logger,
|
||||
@@ -47,6 +50,7 @@ func NewUserApplicationService(
|
||||
smsCodeService: smsCodeService,
|
||||
walletService: walletService,
|
||||
contractService: contractService,
|
||||
apiUserService: apiUserService,
|
||||
eventBus: eventBus,
|
||||
jwtAuth: jwtAuth,
|
||||
logger: logger,
|
||||
@@ -316,16 +320,20 @@ func (s *UserApplicationServiceImpl) ListUsers(ctx context.Context, query *queri
|
||||
items := make([]*responses.UserListItem, 0, len(users))
|
||||
for _, user := range users {
|
||||
item := &responses.UserListItem{
|
||||
ID: user.ID,
|
||||
Phone: user.Phone,
|
||||
UserType: user.UserType,
|
||||
Username: user.Username,
|
||||
IsActive: user.Active,
|
||||
IsCertified: user.IsCertified,
|
||||
LoginCount: user.LoginCount,
|
||||
LastLoginAt: user.LastLoginAt,
|
||||
CreatedAt: user.CreatedAt,
|
||||
UpdatedAt: user.UpdatedAt,
|
||||
ID: user.ID,
|
||||
Phone: user.Phone,
|
||||
UserType: user.UserType,
|
||||
Username: user.Username,
|
||||
IsActive: user.Active,
|
||||
IsCertified: user.IsCertified,
|
||||
IsBlacklisted: user.IsBlacklisted,
|
||||
BlacklistReason: user.BlacklistReason,
|
||||
BlacklistSource: user.BlacklistSource,
|
||||
BlacklistedAt: user.BlacklistedAt,
|
||||
LoginCount: user.LoginCount,
|
||||
LastLoginAt: user.LastLoginAt,
|
||||
CreatedAt: user.CreatedAt,
|
||||
UpdatedAt: user.UpdatedAt,
|
||||
}
|
||||
|
||||
// 添加企业信息
|
||||
@@ -388,16 +396,20 @@ func (s *UserApplicationServiceImpl) GetUserDetail(ctx context.Context, userID s
|
||||
|
||||
// 2. 构建响应数据
|
||||
item := &responses.UserListItem{
|
||||
ID: user.ID,
|
||||
Phone: user.Phone,
|
||||
UserType: user.UserType,
|
||||
Username: user.Username,
|
||||
IsActive: user.Active,
|
||||
IsCertified: user.IsCertified,
|
||||
LoginCount: user.LoginCount,
|
||||
LastLoginAt: user.LastLoginAt,
|
||||
CreatedAt: user.CreatedAt,
|
||||
UpdatedAt: user.UpdatedAt,
|
||||
ID: user.ID,
|
||||
Phone: user.Phone,
|
||||
UserType: user.UserType,
|
||||
Username: user.Username,
|
||||
IsActive: user.Active,
|
||||
IsCertified: user.IsCertified,
|
||||
IsBlacklisted: user.IsBlacklisted,
|
||||
BlacklistReason: user.BlacklistReason,
|
||||
BlacklistSource: user.BlacklistSource,
|
||||
BlacklistedAt: user.BlacklistedAt,
|
||||
LoginCount: user.LoginCount,
|
||||
LastLoginAt: user.LastLoginAt,
|
||||
CreatedAt: user.CreatedAt,
|
||||
UpdatedAt: user.UpdatedAt,
|
||||
}
|
||||
|
||||
// 添加企业信息
|
||||
@@ -459,3 +471,64 @@ func (s *UserApplicationServiceImpl) GetUserStats(ctx context.Context) (*respons
|
||||
CertifiedUsers: stats.CertifiedUsers,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// BlacklistUser 将用户列入黑名单,并同步冻结 API 账号
|
||||
func (s *UserApplicationServiceImpl) BlacklistUser(ctx context.Context, cmd *commands.BlacklistUserCommand) error {
|
||||
user, err := s.userAggregateService.GetUserByID(ctx, cmd.UserID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("用户不存在")
|
||||
}
|
||||
|
||||
source := cmd.Source
|
||||
if source == "" {
|
||||
source = "self"
|
||||
}
|
||||
if err := user.AddToBlacklist(cmd.Reason, source, cmd.OperatorUserID); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.userAggregateService.SaveUser(ctx, user); err != nil {
|
||||
return fmt.Errorf("保存黑名单状态失败: %w", err)
|
||||
}
|
||||
|
||||
// 同步冻结 API 访问(无 API 账号时忽略)
|
||||
if err := s.apiUserService.FreezeApiUser(ctx, cmd.UserID); err != nil {
|
||||
s.logger.Warn("冻结 API 账号失败(可能尚未开通)",
|
||||
zap.String("user_id", cmd.UserID),
|
||||
zap.Error(err))
|
||||
}
|
||||
|
||||
s.logger.Info("用户已列入黑名单",
|
||||
zap.String("user_id", cmd.UserID),
|
||||
zap.String("operator", cmd.OperatorUserID),
|
||||
zap.String("reason", cmd.Reason),
|
||||
zap.Time("blacklisted_at", *user.BlacklistedAt),
|
||||
)
|
||||
return nil
|
||||
}
|
||||
|
||||
// UnblacklistUser 移出黑名单并解冻 API
|
||||
func (s *UserApplicationServiceImpl) UnblacklistUser(ctx context.Context, cmd *commands.UnblacklistUserCommand) error {
|
||||
user, err := s.userAggregateService.GetUserByID(ctx, cmd.UserID)
|
||||
if err != nil {
|
||||
return fmt.Errorf("用户不存在")
|
||||
}
|
||||
|
||||
if err := user.RemoveFromBlacklist(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.userAggregateService.SaveUser(ctx, user); err != nil {
|
||||
return fmt.Errorf("移出黑名单失败: %w", err)
|
||||
}
|
||||
|
||||
if err := s.apiUserService.UnfreezeApiUser(ctx, cmd.UserID); err != nil {
|
||||
s.logger.Warn("解冻 API 账号失败(可能尚未开通)",
|
||||
zap.String("user_id", cmd.UserID),
|
||||
zap.Error(err))
|
||||
}
|
||||
|
||||
s.logger.Info("用户已移出黑名单",
|
||||
zap.String("user_id", cmd.UserID),
|
||||
zap.String("operator", cmd.OperatorUserID),
|
||||
)
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user