// Package repository 提供数据访问层实现 // 包含各种数据实体的仓库接口和实现 package repository import ( "fmt" "git.huangwc.com/pig/pig-farm-controller/internal/model" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) // UserRepo 用户仓库接口 type UserRepo interface { // CreateUser 创建新用户 CreateUser(username, password string) (*model.User, error) // FindByUsername 根据用户名查找用户 FindByUsername(username string) (*model.User, error) // FindByID 根据ID查找用户 FindByID(id uint) (*model.User, error) } // userRepo 用户仓库实现 type userRepo struct { db *gorm.DB } // NewUserRepo 创建用户仓库实例 func NewUserRepo(db *gorm.DB) UserRepo { return &userRepo{ db: db, } } // CreateUser 创建新用户 func (r *userRepo) CreateUser(username, password string) (*model.User, error) { // 检查用户是否已存在 var existingUser model.User result := r.db.Where("username = ?", username).First(&existingUser) if result.Error == nil { return nil, fmt.Errorf("用户已存在") } // 对密码进行哈希处理 hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return nil, fmt.Errorf("密码加密失败: %v", err) } // 创建新用户 user := &model.User{ Username: username, PasswordHash: string(hashedPassword), } result = r.db.Create(user) if result.Error != nil { return nil, fmt.Errorf("用户创建失败: %v", result.Error) } return user, nil } // FindByUsername 根据用户名查找用户 func (r *userRepo) FindByUsername(username string) (*model.User, error) { var user model.User result := r.db.Where("username = ?", username).First(&user) if result.Error != nil { return nil, result.Error } return &user, nil } // FindByID 根据ID查找用户 func (r *userRepo) FindByID(id uint) (*model.User, error) { var user model.User result := r.db.First(&user, id) if result.Error != nil { return nil, result.Error } return &user, nil }