package repository import ( "carrotskin/internal/model" "errors" "gorm.io/gorm" ) // CreateUser 创建用户 func CreateUser(user *model.User) error { return getDB().Create(user).Error } // FindUserByID 根据ID查找用户 func FindUserByID(id int64) (*model.User, error) { var user model.User err := getDB().Where("id = ? AND status != -1", id).First(&user).Error return HandleNotFound(&user, err) } // FindUserByUsername 根据用户名查找用户 func FindUserByUsername(username string) (*model.User, error) { var user model.User err := getDB().Where("username = ? AND status != -1", username).First(&user).Error return HandleNotFound(&user, err) } // FindUserByEmail 根据邮箱查找用户 func FindUserByEmail(email string) (*model.User, error) { var user model.User err := getDB().Where("email = ? AND status != -1", email).First(&user).Error return HandleNotFound(&user, err) } // UpdateUser 更新用户 func UpdateUser(user *model.User) error { return getDB().Save(user).Error } // UpdateUserFields 更新指定字段 func UpdateUserFields(id int64, fields map[string]interface{}) error { return getDB().Model(&model.User{}).Where("id = ?", id).Updates(fields).Error } // DeleteUser 软删除用户 func DeleteUser(id int64) error { return getDB().Model(&model.User{}).Where("id = ?", id).Update("status", -1).Error } // CreateLoginLog 创建登录日志 func CreateLoginLog(log *model.UserLoginLog) error { return getDB().Create(log).Error } // CreatePointLog 创建积分日志 func CreatePointLog(log *model.UserPointLog) error { return getDB().Create(log).Error } // UpdateUserPoints 更新用户积分(事务) func UpdateUserPoints(userID int64, amount int, changeType, reason string) error { return getDB().Transaction(func(tx *gorm.DB) error { var user model.User if err := tx.Where("id = ?", userID).First(&user).Error; err != nil { return err } balanceBefore := user.Points balanceAfter := balanceBefore + amount if balanceAfter < 0 { return errors.New("积分不足") } if err := tx.Model(&user).Update("points", balanceAfter).Error; err != nil { return err } log := &model.UserPointLog{ UserID: userID, ChangeType: changeType, Amount: amount, BalanceBefore: balanceBefore, BalanceAfter: balanceAfter, Reason: reason, } return tx.Create(log).Error }) } // UpdateUserAvatar 更新用户头像 func UpdateUserAvatar(userID int64, avatarURL string) error { return getDB().Model(&model.User{}).Where("id = ?", userID).Update("avatar", avatarURL).Error } // UpdateUserEmail 更新用户邮箱 func UpdateUserEmail(userID int64, email string) error { return getDB().Model(&model.User{}).Where("id = ?", userID).Update("email", email).Error }