Files
tyapi-server/internal/domains/user/services/user_service.go

130 lines
3.5 KiB
Go
Raw Normal View History

package services
import (
"context"
"fmt"
"go.uber.org/zap"
"tyapi-server/internal/domains/user/entities"
"tyapi-server/internal/domains/user/repositories"
)
2025-07-13 16:36:20 +08:00
// UserService 用户领域服务
type UserService struct {
2025-07-13 16:36:20 +08:00
userRepo repositories.UserRepository
enterpriseService *EnterpriseService
logger *zap.Logger
}
2025-07-13 16:36:20 +08:00
// NewUserService 创建用户领域服务
func NewUserService(
2025-07-13 16:36:20 +08:00
userRepo repositories.UserRepository,
enterpriseService *EnterpriseService,
logger *zap.Logger,
) *UserService {
return &UserService{
2025-07-13 16:36:20 +08:00
userRepo: userRepo,
enterpriseService: enterpriseService,
logger: logger,
}
}
2025-07-13 16:36:20 +08:00
// IsPhoneRegistered 检查手机号是否已注册
func (s *UserService) IsPhoneRegistered(ctx context.Context, phone string) (bool, error) {
_, err := s.userRepo.GetByPhone(ctx, phone)
if err != nil {
return false, err
}
return true, nil
}
2025-07-13 16:36:20 +08:00
// GetUserWithEnterpriseInfo 获取用户信息(包含企业信息)
func (s *UserService) GetUserWithEnterpriseInfo(ctx context.Context, userID string) (*entities.User, error) {
// 通过企业服务获取用户信息(包含企业信息)
return s.enterpriseService.GetUserWithEnterpriseInfo(ctx, userID)
}
2025-07-13 16:36:20 +08:00
// GetUserByID 根据ID获取用户信息
func (s *UserService) GetUserByID(ctx context.Context, userID string) (*entities.User, error) {
user, err := s.userRepo.GetByID(ctx, userID)
if err != nil {
2025-07-13 16:36:20 +08:00
return nil, fmt.Errorf("用户不存在: %w", err)
}
2025-07-13 16:36:20 +08:00
return &user, nil
}
2025-07-13 16:36:20 +08:00
// GetUserByPhone 根据手机号获取用户信息
func (s *UserService) GetUserByPhone(ctx context.Context, phone string) (*entities.User, error) {
user, err := s.userRepo.GetByPhone(ctx, phone)
if err != nil {
2025-07-13 16:36:20 +08:00
return nil, fmt.Errorf("用户不存在: %w", err)
}
return user, nil
}
2025-07-13 16:36:20 +08:00
// UpdateUser 更新用户信息
func (s *UserService) UpdateUser(ctx context.Context, user *entities.User) error {
if err := s.userRepo.Update(ctx, *user); err != nil {
s.logger.Error("更新用户信息失败", zap.Error(err))
return fmt.Errorf("更新用户信息失败: %w", err)
2025-07-11 21:05:58 +08:00
}
2025-07-13 16:36:20 +08:00
s.logger.Info("用户信息更新成功",
zap.String("user_id", user.ID),
2025-07-13 16:36:20 +08:00
zap.String("phone", user.Phone),
)
2025-07-13 16:36:20 +08:00
return nil
}
2025-07-13 16:36:20 +08:00
// ChangePassword 修改用户密码
func (s *UserService) ChangePassword(ctx context.Context, userID, oldPassword, newPassword string) error {
user, err := s.userRepo.GetByID(ctx, userID)
if err != nil {
2025-07-02 16:17:59 +08:00
return fmt.Errorf("用户不存在: %w", err)
}
2025-07-13 16:36:20 +08:00
if err := user.ChangePassword(oldPassword, newPassword, newPassword); err != nil {
2025-07-11 21:05:58 +08:00
return err
}
2025-07-13 16:36:20 +08:00
if err := s.userRepo.Update(ctx, user); err != nil {
s.logger.Error("密码修改失败", zap.Error(err))
return fmt.Errorf("密码修改失败: %w", err)
}
2025-07-13 16:36:20 +08:00
s.logger.Info("密码修改成功",
zap.String("user_id", userID),
)
2025-07-02 16:17:59 +08:00
return nil
}
2025-07-13 16:36:20 +08:00
// ValidateUser 验证用户信息
func (s *UserService) ValidateUser(ctx context.Context, userID string) error {
user, err := s.userRepo.GetByID(ctx, userID)
if err != nil {
2025-07-11 21:05:58 +08:00
return fmt.Errorf("用户不存在: %w", err)
}
2025-07-13 16:36:20 +08:00
// 这里可以添加更多的用户验证逻辑
if user.Phone == "" {
return fmt.Errorf("用户手机号不能为空")
2025-07-11 21:05:58 +08:00
}
return nil
}
2025-07-13 16:36:20 +08:00
// GetUserStats 获取用户统计信息
func (s *UserService) GetUserStats(ctx context.Context) (map[string]interface{}, error) {
// 这里可以添加用户统计逻辑
stats := map[string]interface{}{
"total_users": 0, // 需要实现具体的统计逻辑
"active_users": 0,
"new_users_today": 0,
}
2025-07-13 16:36:20 +08:00
return stats, nil
}