欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Golang Web基础基于Restful API实现用户表的增删该查

程序员文章站 2022-06-19 11:16:17
Model层中User.go 存放数据定义以及对数据进行CRUD操作type User struct {gorm.ModelUsername string `gorm:"type:varchar(20);not null " json:"username"`Password string `gorm:"type:varchar(20);not null" json:"password"`Role int `gorm:"type:int" json:"role"`}// 查询用户是...

Model层中User.go 存放数据定义以及对数据进行CRUD操作

type User struct {
	gorm.Model
	Username string `gorm:"type:varchar(20);not null " json:"username"`
	Password string `gorm:"type:varchar(20);not null" json:"password"`
	Role int `gorm:"type:int" json:"role"`
}

// 查询用户是否存在
func CheckUser(name string) (code int) {
	var users User
	db.Select("id").Where("username = ?",name).First(&users)
	if users.ID > 0{
		return errmsg.ERROR_USERNAME_USED
	}
	return errmsg.SUCCSE
}

// 新增用户
func CreaterUser(data *User)int{
	data.Password = ScryptPw(data.Password)
	err := db.Create(&data).Error
	if err != nil{
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

// 查询用户列表
func GetUsers(pageSize int,pageNum int) []User{
	var users []User
	err := db.Limit(pageSize).Offset((pageNum-1)*pageSize).Find(&users).Error
	if err !=nil && err != gorm.ErrRecordNotFound{
		return nil
	}
	return users
}

// 密码加盐
func ScryptPw(password string) string{
	const KeyLen = 10
	salt := make([]byte, 8)
	salt = []byte{12,32,4,6,77,22,222,11}

	HashPwd, err := scrypt.Key([]byte(password), salt,16384,8,1,KeyLen)
	if err != nil{
		log.Fatal(err)
	}
	fpw := base64.StdEncoding.EncodeToString(HashPwd)
	return fpw
}

// 编辑用户信息
func EditUser(id int, data *User) int{
	maps := make(map[string]interface{})
	maps["username"] = data.Username
	maps["role"] = data.Role
	err = db.Model(&User{}).Where("id = ? ",id).Updates(maps).Error
	if err != nil{
		return errmsg.ERROR
	}
	return errmsg.SUCCSE

}


// 删除用户
func DeleteUser(id int) int{
	var user User
	err := db.Where("id = ? ",id).Delete(&user).Error
	if err !=nil{
		return errmsg.ERROR
	}
	return errmsg.SUCCSE
}

Control层中放具体从页面获取数据以及与这些数据交互的方法

// 添加用户
func AddUser(c *gin.Context){
	var data model.User
	_ = c.ShouldBindJSON(&data)
	code := model.CheckUser(data.Username)

	if code == errmsg.SUCCSE{
		model.CreaterUser(&data)
	}
	c.JSON(http.StatusOK,gin.H{
		"status":code,
		"data":data,
		"message":errmsg.GetErrMsg(code),
	})
}

// 查询用户列表
func GetUsers(c *gin.Context){
	pageSize, _ := strconv.Atoi(c.Query("pagesize"))
	pageNum,_ := strconv.Atoi(c.Query("pagenum"))

	if pageSize == 0{
		pageNum = -1
	}

	if pageNum == 0{
		pageSize = -1
	}

	data := model.GetUsers(pageSize, pageNum)
	code := errmsg.SUCCSE
	c.JSON(http.StatusOK,gin.H{
		"status":code,
		"data":data,
		"message":errmsg.GetErrMsg(code),
	})
}

// 编辑用户
func EditUser(c *gin.Context){
	var data model.User
	id, _ := strconv.Atoi(c.Param("id"))
	c.ShouldBindJSON(&data)
	code := model.CheckUser(data.Username)
	if code == errmsg.SUCCSE {
		model.EditUser(id,&data)
	}
	if code == errmsg.ERROR_USERNAME_USED{
		c.Abort()
	}
	c.JSON(http.StatusOK,gin.H{
		"status":code,
		"message":errmsg.GetErrMsg(code),
	})
}

// 删除用户
func DeleteUser(c *gin.Context) {
	id, _ := strconv.Atoi(c.Param("id"))
	code := model.DeleteUser(id)
	c.JSON(http.StatusOK,gin.H{
		"status":code,
		"message":errmsg.GetErrMsg(code),
	})
}

在路由模块中,配置相关的路由,并用POSTMAN完成接口的测试

func InitRouter() {
	gin.SetMode(utils.AppMode)
	r := gin.Default()

	router := r.Group("api/v1")
	{
		// 用户模块的路由接口
		router.POST("user/add",v1.AddUser)
		router.GET("users",v1.GetUsers)
		router.PUT("user/:id",v1.EditUser)
		router.DELETE("user/:id",v1.DeleteUser)
		// 分类模块的路由接口

		// 文章模块的路由接口

	}
	r.Run(utils.HttpPort)
}

 

本文地址:https://blog.csdn.net/wwxy1995/article/details/111994583

相关标签: 算法