Files
htwkalender/datamanager/backend/core/app.go
2024-03-03 18:21:50 +01:00

56 lines
996 B
Go

package core
import (
"datamanager/backend/dbx"
"datamanager/backend/tools/hook"
)
type App interface {
// DB returns the default app database instance.
DB() *dbx.DB
OnTerminate() *hook.Hook[*TerminateEvent]
ResetBootstrapState() error
}
func NewBaseApp(config BaseAppConfig) App {
app := &BaseApp{
isDev: config.IsDev,
dataDir: config.DataDir,
db: *dbx.NewDB("neo4j", "password"),
onTerminate: &hook.Hook[*TerminateEvent]{},
}
return app
}
type BaseApp struct {
// configurable parameters
isDev bool
dataDir string
db dbx.DB
onTerminate *hook.Hook[*TerminateEvent]
}
func (app *BaseApp) DB() *dbx.DB {
db := app.db
return &db
}
func (app *BaseApp) ResetBootstrapState() error {
if app.DB() != nil {
if err := app.db.Close(); err != nil {
return err
}
}
// replace the db instance with nil
app.db = dbx.DB{}
return nil
}
func (app *BaseApp) OnTerminate() *hook.Hook[*TerminateEvent] {
return app.onTerminate
}