package main import ( "errors" "flag" "fmt" "log" "net/http" "text/template" rice "github.com/GeertJohan/go.rice" "github.com/go-playground/validator" "github.com/gorilla/sessions" "github.com/labstack/echo-contrib/session" "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" "gitnet.fr/deblan/budget/config" "gitnet.fr/deblan/budget/database/manager" "gitnet.fr/deblan/budget/database/model" "gitnet.fr/deblan/budget/backend/router" ) type TemplateRenderer struct { templates *template.Template } type AppValidator struct { validator *validator.Validate } func (cv *AppValidator) Validate(i interface{}) error { return cv.validator.Struct(i) } func main() { ini := flag.String("c", "config.ini", "Path to config.ini") conf := config.Get() conf.Load(*ini) manager.Get().Db.AutoMigrate(&model.User{}) manager.Get().Db.AutoMigrate(&model.BankAccount{}) manager.Get().Db.AutoMigrate(&model.SavingAccount{}) manager.Get().Db.AutoMigrate(&model.Transaction{}) manager.Get().Db.AutoMigrate(&model.Category{}) manager.Get().Db.AutoMigrate(&model.CategoryRule{}) e := echo.New() e.Use(session.Middleware(sessions.NewCookieStore([]byte("secret")))) e.Validator = &AppValidator{validator: validator.New()} e.Static("/static", "static") assetHandler := http.FileServer(rice.MustFindBox("../../backend/view/static").HTTPBox()) e.GET("/static/*", echo.WrapHandler(http.StripPrefix("/static/", assetHandler))) e.Use(middleware.Logger()) router.RegisterControllers(e) if err := e.Start(fmt.Sprintf("%s:%d", conf.Server.Address, conf.Server.Port)); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Fatal(err) } }