4.gin-gorm用户模块接口

2023-02-13 00:00:04

技术


通过gin-gorm之项目学习部分的学习,可以对项目的架构有深入的了解 🤟 {% post_link "gin-gorm1项目准备初始化" %}
{% post_link "gin-gorm2数据库" %}
{% post_link "gin-gorm3错误处理与路由接口" %}
{% post_link "gin-gorm4用户模块接口编写" %}
{% post_link "gin-gorm5密码加密" %}
{% post_link "gin-gorm6编辑、删除用户" %}


用户模块-增、查

新增用户

在model/User.go中编写,或者新建service层文件也可以

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

// 新增用户   返回状态码
func CreateUser(data *User) int {
    err := db.Create(&data).Error
    if err != nil {
        return errmsg.ERROR //500
    }
    return errmsg.SUCCESS //200

}

在api/v1/user.go接口文件中补全添加用户AddUser的代码

// 添加用户
func AddUser(ctx *gin.Context) {
    var data model.User
    _ = ctx.ShouldBindJSON(&data)
    code = model.CheckUser(data.Username)
    if code == errmsg.SUCCESS {
        model.CreateUser(&data)
    }
    ctx.JSON(http.StatusOK, gin.H{
        "status":  code,
        "data":    data,
        "message": errmsg.GetErrMsg(code),
    })
}

在model中,我们写的是对数据库的操作以及操作的反馈 在api中,我们写的是执行操作的逻辑(操作执行的条件、顺序)以及返回给前端的信息

查询用户

model/User.go

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

api/v1/user.go

// 查询用户列表 分页
// 前端需要传递分页的设置信息给后端
func GetUsers(ctx *gin.Context) {
    pageSize, _ := strconv.Atoi(ctx.Query("pagesize"))
    pageNum, _ := strconv.Atoi(ctx.Query("pagenum"))
    if pageSize == 0 {
        pageSize = -1
    }
    if pageNum == 0 {
        pageNum = -1
    }
    data := model.GetUsers(pageSize, pageNum)
    code = errmsg.SUCCESS
    ctx.JSON(http.StatusOK, gin.H{
        "status":  code,
        "data":    data,
        "message": errmsg.GetErrMsg(code),
    })
}

附加:接口测试

选择接口测试工具:postman、apipost等等

在地址栏输入访问调用函数的路由地址
localhost:3000/api/v1/user/add
localhost:3000/api/v1/users
这些已经在router中定义好,localhost:3000是你定义的服务器地址端口,/api/v1是你定义的路由组入口,后面的是调用函数的路由及参数

以上两个功能为例,使用apipost为例:

添加用户测试

选择POST方式,地址栏输入localhost:3000/api/v1/user/add 选择body-raw-json,输入User数据(json格式),点击发送

{
    "username": "li8",
    "password": "123456",
    "role": 0,
}

可以看到响应信息

查询用户测试

需要先添加多个用户

选择GET方式,地址栏输入localhost:3000/api/v1/users

选择query,填写参数pagesize、pagenum,点击发送,可以看到响应信息