项目笔记(4)——完成用户功能模块总结 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

一、完成用户功能的基本模块

加入修改电话号码和邮箱
先引入

get github.com/asaskevich/govalidator

在结构体字段后面添加检验规则

Phone         string	`valid:"matches(^1[3-9]{1}\\d{9}$)"`
Email         string	`valid:"email"`

最后在相应的service添加上

_,err := govalidator.ValidateStruct(user)

1.router包里面的app.go

r := gin.Default()
docs.SwaggerInfo.BasePath = ""
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
r.GET("/index", service.GetIndex)
r.GET("/user/getUserList", service.GetUserList)
r.GET("/user/createUser",service.CreateUser)
r.GET("/user/deleteUser",service.DeleteUser)
r.POST("/user/updateUser",service.UpdateUser)
return r

2.models包里的userbasic方法

//添加相应的结构体信息字段
Phone         string	`valid:"matches(^1[3-9]{1}\\d{9}$)"`
Email         string	`valid:"email"`
//完成相应的方法
func UpdateUser(user UserBasic) *gorm.DB {
	return utils.DB.Model(user).Updates(UserBasic{Name: user.Name,Password: user.Password,Phone:user.Phone,Email: user.Email})
}

3.service包里的userservice.go完成相应的方法
注意需要在gin-swagger查询具体需要的ui框架

// UpdateUser
// @Summary 更新用户
// @Tags 用户模块
// @param id formData string false "id"
// @param name formData string false "name"
// @param password formData string false "password"
// @param phone formData string false "phone"
// @param email formData string false "email"
// @Success 200 {string} json{"code","message"}
// @Router /user/updateUser [post]
func UpdateUser(c *gin.Context) {
	user := models.UserBasic{}
	id, _ := strconv.Atoi(c.PostForm("id"))
	user.ID = uint(id)
	user.Name = c.PostForm("name")
	user.Password = c.PostForm("password")
	user.Phone = c.PostForm("phone")
	user.Email = c.PostForm("email")

	fmt.Println("update: ", user)

	_,err := govalidator.ValidateStruct(user)
	if err != nil{
		fmt.Println(err)
		c.JSON(200,gin.H{
			"message":"修改参数不匹配!",
		})
	}else{
		models.UpdateUser(user)
		c.JSON(200, gin.H{
			"message": "更新成功!",
		})		
	}
}

4.swag init

前三步完成后,需要在终端中输入swag init,将相应的接口写入swagger中,成功显示后那么此次接口即完成编写。

总结:三个文件夹包里的关系

models:里面存储着数据库的信息字段,也即结构体,当有字段需要校验时,需要在其后面添加上“valid:”。同时,里面还存储着数据库的调用方法,当在service包中对相应字段进行修改时,数据将会通过models里的这个方法传回数据库,达到更新的目的。

service:里面存放着接口所需要用的方法,用于对数据库进行更新,方法名与models中的方法名一致,注意还需要对上方注释swagger-ui进行修改。

router:当对方法编辑完成时,需要在路由中添加对应的网络请求,即GET或者POST,并将相应的路径添加进去。

image.png