快速开始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 协议》,转载必须注明作者和本文链接