85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // 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
 | |
| }
 |