# Repository层 数据访问层,负责与数据库交互。 ## 用户Repository ### 功能 - ✅ 用户CRUD操作 - ✅ 根据手机号查询用户 - ✅ 更新用户Token - ✅ 验证用户密码(bcrypt) - ✅ 密码加密(HashPassword辅助函数) ### 使用方法 ```go import ( "github.com/topfans/backend/services/userService/repository" "github.com/topfans/backend/pkg/models" ) // 创建Repository实例 userRepo := repository.NewUserRepository() // 1. 创建用户 hashedPassword, _ := repository.HashPassword("password123") user := &models.User{ Mobile: "13800000000", PasswordHash: hashedPassword, IsActive: true, } err := userRepo.Create(user) // 2. 根据ID查询 user, err := userRepo.GetByID(10000001) // 3. 根据手机号查询 user, err := userRepo.GetByMobile("13800000000") // 4. 更新用户 user.AvatarURL = &avatarURL err := userRepo.Update(user) // 5. 更新Token err := userRepo.UpdateToken(userID, token, expiresAt) // 6. 清除Token(登出) err := userRepo.ClearToken(userID) // 7. 验证密码 isValid := userRepo.VerifyPassword(user, "password123") ``` ### 密码加密 使用bcrypt进行密码加密,确保安全性: ```go // 加密密码 hashedPassword, err := repository.HashPassword("password123") // 验证密码 isValid := userRepo.VerifyPassword(user, "password123") ``` ### 注意事项 1. **密码加密**:创建用户前必须先使用`HashPassword`加密密码 2. **软删除**:`GetByID`和`GetByMobile`只会返回`is_active=true`的用户 3. **Token更新**:`UpdateToken`会同时更新`access_token`和`token_expires_at` 4. **时间戳**:创建和更新操作会自动设置时间戳(通过Model的BeforeCreate/BeforeUpdate钩子) ### 错误处理 - 所有方法都会返回error,需要检查 - 用户不存在时返回`"user not found"`错误 - 无效参数时返回相应的错误信息 ## 粉丝档案Repository ### 功能 - ✅ 粉丝档案CRUD操作 - ✅ 根据user_id + star_id查询 - ✅ 查询用户的所有粉丝身份 - ✅ 检查用户粉丝身份数量 - ✅ 更新粉丝档案和昵称 ### 使用方法 ```go fanProfileRepo := repository.NewFanProfileRepository() // 1. 创建粉丝档案 profile := &models.FanProfile{ UserID: 10000001, StarID: 123, Nickname: "爱战战", Level: 1, Times: 3, } err := fanProfileRepo.Create(profile) // 2. 根据user_id + star_id查询 profile, err := fanProfileRepo.GetByUserAndStar(10000001, 123) // 3. 查询用户的所有粉丝身份 profiles, err := fanProfileRepo.GetByUserID(10000001) // 4. 统计用户粉丝身份数量 count, err := fanProfileRepo.CountByUserID(10000001) // 5. 更新昵称 err := fanProfileRepo.UpdateNickname(10000001, 123, "新昵称") ``` --- ## 明星Repository ### 功能 - ✅ 明星信息查询(按ID和identity_id) - ✅ 获取所有可用明星列表 - ✅ 搜索明星(按名称,支持中文和英文) ### 使用方法 ```go starRepo := repository.NewStarRepository() // 1. 根据ID查询 star, err := starRepo.GetByID(123) // 2. 根据identity_id查询 star, err := starRepo.GetByIdentityID("xiaozhan") // 3. 获取所有可用明星列表 stars, err := starRepo.GetAllActive() // 4. 搜索明星(支持中文和英文名) stars, err := starRepo.Search("肖战") stars, err := starRepo.Search("Xiao") ``` --- ## 测试 运行测试: ```bash cd services/userService go test ./repository -v ``` 测试覆盖: - ✅ 用户创建和查询 - ✅ 密码加密和验证 - ✅ Token更新和清除 - ✅ 粉丝档案CRUD操作 - ✅ 联合唯一索引验证 - ✅ 明星查询和搜索 - ✅ 软删除过滤(is_active) - ✅ 各种错误场景