package repository import ( "carrotskin/internal/model" "carrotskin/pkg/database" "errors" "gorm.io/gorm" ) // CreateUser 创建用户 func CreateUser(user *model.User) error { db := database.MustGetDB() return db.Create(user).Error } // FindUserByID 根据ID查找用户 func FindUserByID(id int64) (*model.User, error) { db := database.MustGetDB() var user model.User err := db.Where("id = ? AND status != -1", id).First(&user).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &user, nil } // FindUserByUsername 根据用户名查找用户 func FindUserByUsername(username string) (*model.User, error) { db := database.MustGetDB() var user model.User err := db.Where("username = ? AND status != -1", username).First(&user).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &user, nil } // FindUserByEmail 根据邮箱查找用户 func FindUserByEmail(email string) (*model.User, error) { db := database.MustGetDB() var user model.User err := db.Where("email = ? AND status != -1", email).First(&user).Error if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return nil, nil } return nil, err } return &user, nil } // UpdateUser 更新用户 func UpdateUser(user *model.User) error { db := database.MustGetDB() return db.Save(user).Error } // UpdateUserFields 更新指定字段 func UpdateUserFields(id int64, fields map[string]interface{}) error { db := database.MustGetDB() return db.Model(&model.User{}).Where("id = ?", id).Updates(fields).Error } // DeleteUser 软删除用户 func DeleteUser(id int64) error { db := database.MustGetDB() return db.Model(&model.User{}).Where("id = ?", id).Update("status", -1).Error } // CreateLoginLog 创建登录日志 func CreateLoginLog(log *model.UserLoginLog) error { db := database.MustGetDB() return db.Create(log).Error } // CreatePointLog 创建积分日志 func CreatePointLog(log *model.UserPointLog) error { db := database.MustGetDB() return db.Create(log).Error } // UpdateUserPoints 更新用户积分(事务) func UpdateUserPoints(userID int64, amount int, changeType, reason string) error { db := database.MustGetDB() return db.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 { db := database.MustGetDB() return db.Model(&model.User{}).Where("id = ?", userID).Update("avatar", avatarURL).Error } // UpdateUserEmail 更新用户邮箱 func UpdateUserEmail(userID int64, email string) error { db := database.MustGetDB() return db.Model(&model.User{}).Where("id = ?", userID).Update("email", email).Error }