package main
import (
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"net/http"
)
type Todo struct {
ID int `json:"id"`
Title string `json:"title"`
Status bool `json:"status"`
}
var DB *gorm.DB
var mysqlLogger logger.Interface
func init() {
username := "root"
password := "asd123456"
host := "127.0.0.1"
port := 3306
Dbname := "gorm"
timeout := "10s"
mysqlLogger = logger.Default.LogMode(logger.Info)
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s",
username, password, host, port, Dbname, timeout)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true,
NamingStrategy: schema.NamingStrategy{
TablePrefix: "f_",
SingularTable: true,
NoLowerCase: true,
},
})
if err != nil {
panic("连接数据库失败: " + err.Error())
}
DB = db
}
func main() {
DB.AutoMigrate(&Todo{})
r := gin.Default()
r.Static("/static", "static")
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
r.GET("/struct", func(c *gin.Context) {
})
v1Group := r.Group("v1")
{
v1Group.POST("/todo", func(c *gin.Context) {
var todo Todo
c.BindJSON(&todo)
if err := DB.Create(&todo).Error; err != nil {
c.JSON(http.StatusOK, gin.H{
"error": err.Error()})
} else {
c.JSON(http.StatusOK, todo)
}
})
v1Group.GET("/todo", func(c *gin.Context) {
var todolist []Todo
if err := DB.Find(&todolist).Error; err != nil {
c.JSON(http.StatusOK, gin.H{
"error": err.Error()})
} else {
c.JSON(http.StatusOK, todolist)
}
})
v1Group.GET("/todo/:id", func(c *gin.Context) {
})
v1Group.PUT("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "id不存在"})
return
}
var todo Todo
if err := DB.Where("id=?", id).First(&todo).Error; err != nil {
c.JSON(http.StatusOK, gin.H{
"error": err.Error()})
return
}
c.BindJSON(&todo)
if err := DB.Save(&todo).Error; err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, todo)
}
})
v1Group.DELETE("/todo/:id", func(c *gin.Context) {
id, ok := c.Params.Get("id")
if !ok {
c.JSON(http.StatusOK, gin.H{"error": "id不存在"})
return
}
if err := DB.Where("id=?", id).Delete(Todo{}).Error; err != nil {
c.JSON(http.StatusOK, gin.H{"error": err.Error()})
} else {
c.JSON(http.StatusOK, gin.H{id: "deleted"})
}
})
}
r.Run(":9090")
}