Labstack gorm example 1
Jump to navigation
Jump to search
package main
import (
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var db *gorm.DB
type Page struct {
ID uuid.UUID `gorm:"type:uuid;primaryKey"`
Name string
}
func main() {
// Initialize Echo
e := echo.New()
// Initialize GORM
var err error
db, err = gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{})
if err != nil {
e.Logger.Fatal(err)
}
// Auto-migrate the schema
if err := db.AutoMigrate(&Page{}); err != nil {
e.Logger.Fatal(err)
}
// Routes
e.GET("/pages", getPages)
e.POST("/pages", createPage)
// Start server
e.Logger.Fatal(e.Start(":8080"))
}
// Handler for GET /pages
func getPages(c echo.Context) error {
// Retrieve all pages from the database
var pages []Page
if err := db.Find(&pages).Error; err != nil {
return c.JSON(500, map[string]string{"error": "Failed to retrieve pages"})
}
return c.JSON(200, pages)
}
// Handler for POST /pages
func createPage(c echo.Context) error {
// Bind request body to Page struct
var page Page
if err := c.Bind(&page); err != nil {
return c.JSON(400, map[string]string{"error": "Invalid request body"})
}
// Generate UUID for the ID field
page.ID = uuid.New()
// Create new page record in the database
if err := db.Create(&page).Error; err != nil {
return c.JSON(500, map[string]string{"error": "Failed to create page"})
}
return c.JSON(201, page)
}