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 }