基於gin+gorm 提供api 接口

1.實現方案

使用GO框架Gin用戶路由控制和返回數據。

使用Gorm用於操作數據庫。

使用jwt 生成token進行接口認證。

2.代碼邏輯

入口

import (
	"gin-gorm/jwtgo"
	"gin-gorm/route"
	"github.com/gin-gonic/gin"
)

func main() {
	router()
}

func router() {
	router := gin.Default()
	gin.SetMode(gin.DebugMode)
	//不用認證
	v1 := router.Group("/api/v1")
	route.Test(v1)

	//需要認證,啓動jwt中間件
	v2 := router.Group("/api/auth")
	// 加載自定義的JWTAuth()中間件,在整個sv1的路由組中都生效
	v2.Use(jwtgo.JWTAuth())
	route.User(v2)

	router.Run()
}

數據訪問

package controller

import (
   "fmt"
   "gin-gorm/dao"
   "gin-gorm/model"
   "github.com/gin-gonic/gin"
   "net/http"
   "strconv"
)

var db = dao.GetDB()

/**
創建新用戶
{
"name":"xinihuhua",
"age":30
}
*/
func CreateUser(c *gin.Context) {
   var user model.UserModel
   if err := c.ShouldBindJSON(&user); err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": err.Error()})
      return
   }
   //會自動創建create_at  update_at  deleted_at 字段信息
   ret := db.Table("user").Create(&user)
   if ret.Error != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": ret.Error.Error()})
      return
   }
   c.JSON(http.StatusOK, gin.H{"status": http.StatusOK, "msg": "創建成功", "data": user.ID})
}

func FetchAllUser(c *gin.Context) {
   var users []model.UserModel
   var _users []model.TransformedUser
   page := c.DefaultQuery("page", "1")
   size := c.DefaultQuery("size", "10")
   limit, err := strconv.Atoi(size)
   if err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": err.Error()})
      return
   }
   p, err := strconv.Atoi(page)
   if err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": err.Error()})
      return
   }
   offset := (p - 1) * limit
   ret := db.Table("user").Limit(limit).Offset(offset).Find(&users)
   if ret.Error != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": ret.Error.Error()})
      return
   }
   for _, item := range users {
      _users = append(_users, model.TransformedUser{
         ID:   item.ID,
         Name: item.Name,
         Age:  item.Age,
      })
   }

   c.JSON(http.StatusOK, gin.H{"status": http.StatusOK, "msg": "查詢列表成功", "data": gin.H{"count": ret.RowsAffected, "list": _users}})
}

func FetchSingleUser(c *gin.Context) {
   var user model.UserModel
   var _user model.TransformedUser
   if err := c.ShouldBindUri(&_user); err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusOK, "msg": err.Error()})
      return
   }
   ret := db.Table("user").First(&user, _user.ID)
   if ret.Error != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": ret.Error.Error()})
      return
   }
   _user = model.TransformedUser{
      ID:   user.ID,
      Name: user.Name,
      Age:  user.Age,
   }
   c.JSON(http.StatusOK, gin.H{"status": http.StatusOK, "msg": "查詢詳情成功", "data": _user})
}

func UpdateUser(c *gin.Context) {
   var user model.UserModel
   var _user model.TransformedUser
   if err := c.ShouldBindUri(&_user); err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": err.Error()})
      return
   }
   if err := c.ShouldBindJSON(&user); err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": err.Error()})
      return
   }
   fmt.Println(_user.ID)
   ret := db.Table("user").Model(&_user).Updates(&user)
   if ret.Error != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": ret.Error.Error()})
      return
   }
   _user = model.TransformedUser{
      ID:   user.ID,
      Name: user.Name,
      Age:  user.Age,
   }
   c.JSON(http.StatusOK, gin.H{"status": http.StatusOK, "msg": "更新成功", "data": _user})
}

func DeleteUser(c *gin.Context) {
   //var controller model.UserModel
   var _user model.TransformedUser
   if err := c.ShouldBindUri(&_user); err != nil {
      c.JSON(http.StatusBadRequest, gin.H{"msg": err.Error()})
      return
   }
   ret := db.Table("user").Delete(&_user)
   if ret.Error != nil {
      c.JSON(http.StatusBadRequest, gin.H{"status": http.StatusBadRequest, "msg": ret.Error.Error()})
      return
   }

   c.JSON(http.StatusOK, gin.H{"status": http.StatusOK, "msg": "刪除成功", "data": ret.RowsAffected})
}

 

參考: https://gitee.com/xinihuhu/gin-gorm

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章