本文需要介紹 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 協議》,轉載必須註明作者和本文連結