API Engine

Example

package main

import (
	"fmt"
	controller "github.com/borankux/api-engine/controllers"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
)

type User struct {
	ID    int    `json:"id"`
	Name  string `json:"name" binding:"required"`
	Age   int    `json:"age" binding:"required"`
	Posts []Post `json:"posts" gorm:"foreignKey:UserID"`
}

type Post struct {
	ID      int    `json:"id"`
	Title   string `json:"title" binding:"required"`
	Content string `json:"content" binding:"required"`
	UserID  int    `json:"user_id" binding:"required"`
	User    User   `json:"user" gorm:"foreignKey:UserID"`
}

var db *gorm.DB

func InitDB() {
	opened, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}
	err = opened.AutoMigrate(&User{}, &Post{})
	if err != nil {
		panic("failed to migrate database")
	}
	db = opened
	fmt.Println("Database connected")
}
func GetDB() *gorm.DB {
	return db
}

func main() {
	InitDB()
	app := gin.Default()
	app.Use(func(c *gin.Context) {
		c.Set("database", GetDB())
		c.Next()
	})
	controller.RegisterResource[User]("users", app.Group("/api"), &controller.ResourceConfiguration{
		With:        []string{"Posts"},
		WithMethods: []string{"LIST", "GET"},
	})
	app.Run(":8080")
}