注册功能
route.go
package router
import (
"bluebell/controller"
"github.com/gin-gonic/gin"
)
func SetupRouter(mode string) *gin.Engine {
r := gin.Default()
r.POST("/signup", controller.SignupHandler)
return r
}
UserController.go
package controller
import (
"bluebell/logic"
"bluebell/models"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"net/http"
)
func SignupHandler(c *gin.Context) {
// 1。获取参数和参数校验 -> controller
p := new(models.ParamSignup)
err := c.ShouldBindJSON(p)
if err != nil {
c.JSON(http.StatusOK, gin.H{
"msg": err.Error(),
})
zap.L().Error("Bad query params", zap.Error(err))
return
}
if len(p.Username) == 0 || len(p.Password) == 0 || len(p.RePassword) == 0 || p.Password != p.RePassword {
c.JSON(http.StatusOK, gin.H{
"msg": err.Error(),
})
return
}
// 2。业务处理
logic.Signup(p)
// 3。返回响应
c.JSON(http.StatusOK, "ok")
}
UserLogic.go
package logic
import (
"bluebell/dao/mysql"
"bluebell/models"
"bluebell/pkg/snowflake"
)
func Signup(p *models.ParamSignup) {
// 1.判断用户是否存在
exist := mysql.QueryUserByUsername(p.Username)
if exist {
return
}
// 2. 生成UID
uerId, err := snowflake.GetID()
if err != nil {
return
}
user := models.User{
UserId: uerId,
Username: p.Username,
Password: p.Password,
}
// 3. 保存进数据库
mysql.InsertUser(user)
}
UserDao.go
package mysql
import "bluebell/models"
func QueryUserByUsername(username string) bool {
// 执行SQL语句
// SELECT * FROM user WHERE id = ?
var count int64
db.Where("username = ?", username).Count(&count)
return count > 0
}
func InsertUser(user models.User) {
// 执行SQL语句
// INSERT INTO user (userId, username, password) VALUES (?, ?, ?)
if err := db.Create(&user); err != nil {
return
}
return
}