go-web/framework/providers/app/service.go
2024-09-30 13:42:37 +02:00

103 lines
2.2 KiB
Go

package app
import (
"flag"
"fmt"
"path/filepath"
"git.vinchent.xyz/vinchent/go-web/framework"
"git.vinchent.xyz/vinchent/go-web/framework/utils"
)
type GoWebApp struct {
container framework.Container
baseFolder string
}
const AppVersion = "0.0.1"
func ErrParamsAmount(want int, got int) error {
return fmt.Errorf("want %d arguments, got %d", want, got)
}
// NewGoWebApp creates a new GoWeb app.
//
// \params[in]: container
// \params[in]: baseFolder
func NewGoWebApp(params ...interface{}) (interface{}, error) {
if len(params) != 2 {
return nil, ErrParamsAmount(2, len(params))
}
container := params[0].(framework.Container)
baseFolder := params[1].(string)
return &GoWebApp{
container: container,
baseFolder: baseFolder,
}, nil
}
func (goweb *GoWebApp) Version() string {
return AppVersion
}
func (goweb *GoWebApp) BaseFolder() string {
if goweb.baseFolder != "" {
return goweb.baseFolder
}
// not defined yet
var baseFolder string
flag.StringVar(
&baseFolder,
"base_folder",
utils.GetExecDirectory(),
"base_folder of the app. Use the current path as default value",
)
return baseFolder
}
func (goweb *GoWebApp) ConfigFolder() string {
return filepath.Join(goweb.BaseFolder(), "config")
}
func (goweb *GoWebApp) StorageFolder() string {
return filepath.Join(goweb.BaseFolder(), "storage")
}
func (goweb *GoWebApp) LogFolder() string {
// storage/log
return filepath.Join(goweb.StorageFolder(), "log")
}
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) MiddlewaresFolder() string {
// http/middlewares
return filepath.Join(goweb.HttpFolder(), "middlewares")
}
func (goweb *GoWebApp) ConsoleFolder() string {
return filepath.Join(goweb.BaseFolder(), "console")
}
func (goweb *GoWebApp) CommandsFolder() string {
// console/commands
return filepath.Join(goweb.ConsoleFolder(), "commands")
}
func (goweb *GoWebApp) RuntimeFolder() string {
return filepath.Join(goweb.StorageFolder(), "runtime")
}
func (goweb *GoWebApp) TestsFolder() string {
return filepath.Join(goweb.BaseFolder(), "tests")
}