Integrate cobra into the framework part1

This commit is contained in:
Muyao CHEN
2024-09-30 19:38:16 +02:00
parent fc4f94e967
commit 9da3012789
13 changed files with 159 additions and 42 deletions

View File

@ -0,0 +1,8 @@
package commands
import "github.com/spf13/cobra"
func AddKernelCommands(root *cobra.Command) {
// root.AddCommand(DemoCommand)
// root.AddCommand(initAppCommand())
}

View File

@ -0,0 +1,10 @@
package contract
import "net/http"
const KernelName = "goweb:kernel"
type Kernel interface {
// HttpEngine we use actually gin.Engine, but it is open to change.
HttpEngine() http.Handler
}

View File

@ -5,26 +5,26 @@ import (
"git.vinchent.xyz/vinchent/go-web/framework/contract"
)
type GoWebProvider struct {
type GoWebAppProvider struct {
BaseFolder string
}
func (goweb *GoWebProvider) Register(c framework.Container) framework.NewInstance {
func (goweb *GoWebAppProvider) Register(c framework.Container) framework.NewInstance {
return NewGoWebApp
}
func (goweb *GoWebProvider) Init(c framework.Container) error {
func (goweb *GoWebAppProvider) Init(c framework.Container) error {
return nil
}
func (goweb *GoWebProvider) InstantiateLater() bool {
func (goweb *GoWebAppProvider) InstantiateLater() bool {
return false
}
func (goweb *GoWebProvider) Params(c framework.Container) []interface{} {
func (goweb *GoWebAppProvider) Params(c framework.Container) []interface{} {
return []interface{}{c, goweb.BaseFolder}
}
func (goweb *GoWebProvider) Name() string {
func (goweb *GoWebAppProvider) Name() string {
return contract.AppName
}

View File

@ -75,13 +75,13 @@ func (goweb *GoWebApp) ProvidersFolder() string {
return filepath.Join(goweb.BaseFolder(), "providers")
}
func (goweb *GoWebApp) HttpFolder() string {
return filepath.Join(goweb.BaseFolder(), "http")
func (goweb *GoWebApp) WebFolder() string {
return filepath.Join(goweb.BaseFolder(), "web")
}
func (goweb *GoWebApp) MiddlewaresFolder() string {
// http/middlewares
return filepath.Join(goweb.HttpFolder(), "middlewares")
return filepath.Join(goweb.WebFolder(), "middlewares")
}
func (goweb *GoWebApp) ConsoleFolder() string {

View File

@ -0,0 +1,31 @@
package kernel
import (
"git.vinchent.xyz/vinchent/go-web/framework"
"git.vinchent.xyz/vinchent/go-web/framework/contract"
"github.com/gin-gonic/gin"
)
type GoWebKernelProvider struct {
HttpEngine *gin.Engine
}
func (goweb *GoWebKernelProvider) Register(c framework.Container) framework.NewInstance {
return NewGoWebKernelService
}
func (goweb *GoWebKernelProvider) Init(c framework.Container) error {
return nil
}
func (goweb *GoWebKernelProvider) InstantiateLater() bool {
return false
}
func (goweb *GoWebKernelProvider) Params(c framework.Container) []interface{} {
return []interface{}{c, goweb.HttpEngine}
}
func (goweb *GoWebKernelProvider) Name() string {
return contract.AppName
}

View File

@ -0,0 +1,22 @@
package kernel
import (
"net/http"
"github.com/gin-gonic/gin"
)
type GoWebKernelService struct {
// Since the container is included in the engine, we don't need to pass
// it as an argument.
engine *gin.Engine
}
func NewGoWebKernelService(params ...interface{}) (interface{}, error) {
httpEngine := params[0].(*gin.Engine)
return &GoWebKernelService{engine: httpEngine}, nil
}
func (goweb *GoWebKernelService) HttpEngine() http.Handler {
return goweb.engine
}