快速开始api开发(三)第一个接口-注册

本文需要介绍 gotools 工具

需要使用的工具命令:gotools handler -h
代码地址:github.com/wuyan94zl/gotools

注册接口

生成

执行 gotools handler --dir users --method POST --name register

以上会生成一个路由 POST /users/register

文件目录如下

app
    |-- handler
        |-- usersregister.go
    |-- logic
        |-- users
            |-- register.go // 接口逻辑处理
    |-- types
        |-- users.go // 入参出参设置文件

设置接口出入参

修改 app/types/users.go

type UsersRegisterRequest struct {
    Nickname string `json:"nickname" validate:"required" tip:"用户昵称不能为空"`
    LoginID  string `json:"login_id" validate:"required,gte=6,lte=32" tip:"用户登录名长度介于6-32位"`
    Password string `json:"password" validate:"required,gte=6,lte=32" tip:"用户密码长度介于6-32位"`
}

type UsersRegisterResponse struct {
    ExpTime interface{} `json:"exp_time"` // 增加代码
    Token   interface{} `json:"token"`    // 增加代码
}

编写注册逻辑

修改 app/logic/users/register.go

package users

import (
    "errors"
    "github.com/gin-gonic/gin"
    "github.com/wuyan94zl/example-api/container"
    "github.com/wuyan94zl/example-api/models/user"
    "github.com/wuyan94zl/gotools/jwt"
    "github.com/wuyan94zl/gotools/utils"
    "gorm.io/gorm"

    "github.com/wuyan94zl/example-api/app/types"
)

func RegisterLogic(c *gin.Context, req *types.UsersRegisterRequest) (*types.UsersRegisterResponse, error) {
    _, err := container.Instance().UserModel.FindByLoginID(c.Copy(), req.LoginID)
    if err == nil {
        return nil, errors.New("该登录名已注册")
    }
    if err != gorm.ErrRecordNotFound {
        return nil, err
    }

    u := user.Users{
        Nickname: req.Nickname,
        LoginID:  req.LoginID,
        Password: utils.Md5ByString(req.Password + req.LoginID),
    }
    insert, err := container.Instance().UserModel.Insert(c.Copy(), &u)
    if err != nil {
        return nil, err
    }
    data := make(map[string]interface{})
    data["ID"] = insert.ID
    data["Nickname"] = insert.Nickname
    token, err := jwt.GenToken(container.Instance().JwtConfig, data)
    if err != nil {
        return nil, err
    }
    return &types.UsersRegisterResponse{
        ExpTime: token["expTime"],
        Token:   token["token"],
    }, nil
}

增加 model FindByLoginID 方法
修改 models/users/model.go

package user

import (
    "context"
    "gorm.io/gorm"
)

type (
    UsersModel interface {
        usersModel
        FindByLoginID(ctx context.Context, loginID string) (*Users, error) // 增加代码
    }
    customUsersModel struct {
        *defaultUsersModel
    }
)

func NewUsersModel(gormDb *gorm.DB) UsersModel {
    return &customUsersModel{
        defaultUsersModel: newUsersModel(gormDb),
    }
}
// 增加方法
func (c *customUsersModel) FindByLoginID(ctx context.Context, loginID string) (*Users, error) {
    info := new(Users)
    err := c.Conn.WithContext(ctx).Where("login_id = ?", loginID).First(info).Error
    return info, err
}

结束

以上注册接口就完成了,步骤如下:

  • 使用 gotools handler --dir users --method POST --name register 生成文件
  • 设置接口入参出参 app/types/users.go
  • 编写业务逻辑 app/logic/users/register.go
  • 启动go run main.go

下节登录与认证

本作品采用《CC 协议》,转载必须注明作者和本文链接
没有造飞机的格局,怎么能拧得好螺丝。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!