From d1cf75ab79498fa8496cb3138e6572464cb0488b Mon Sep 17 00:00:00 2001 From: Jonas Plum Date: Wed, 6 Nov 2024 01:21:31 +0100 Subject: [PATCH] refactor: subcommands (#1111) --- Makefile | 6 ++---- app/app.go | 46 +++++++++++++++++++++++++++++++--------------- app/fakedata.go | 6 ++---- app/flags.go | 33 --------------------------------- testing/testapp.go | 4 ++++ 5 files changed, 39 insertions(+), 56 deletions(-) diff --git a/Makefile b/Makefile index 63fe587..739c095 100644 --- a/Makefile +++ b/Makefile @@ -60,18 +60,16 @@ dev: @echo "Running..." rm -rf catalyst_data go run . admin create admin@catalyst-soar.com 1234567890 - go run . set-feature-flags dev go run . fake-data - go run . serve + go run . serve --app-url http://localhost:8090 --flags dev .PHONY: dev-10000 dev-10000: @echo "Running..." rm -rf catalyst_data go run . admin create admin@catalyst-soar.com 1234567890 - go run . set-feature-flags dev go run . fake-data --users 100 --tickets 10000 - go run . serve + go run . serve --app-url http://localhost:8090 --flags dev .PHONY: serve-ui serve-ui: diff --git a/app/app.go b/app/app.go index 51b11be..26272ed 100644 --- a/app/app.go +++ b/app/app.go @@ -23,31 +23,47 @@ func App(dir string, test bool) (*pocketbase.PocketBase, error) { DefaultDataDir: dir, }) + var appURL string + + app.RootCmd.PersistentFlags().StringVar(&appURL, "app-url", "", "the app's URL") + + var flags []string + + app.RootCmd.PersistentFlags().StringSliceVar(&flags, "flags", nil, "feature flags") + + _ = app.RootCmd.ParseFlags(os.Args[1:]) + + app.RootCmd.AddCommand(fakeDataCmd(app)) + webhook.BindHooks(app) reaction.BindHooks(app, test) - app.OnBeforeServe().Add(addRoutes()) - app.OnAfterBootstrap().Add(func(e *core.BootstrapEvent) error { + if err := MigrateDBs(e.App); err != nil { + return err + } + + if err := SetFlags(e.App, flags); err != nil { + return err + } + if HasFlag(e.App, "demo") { bindDemoHooks(e.App) } - return nil + if appURL != "" { + s := e.App.Settings() + s.Meta.AppUrl = appURL + + if err := e.App.Dao().SaveSettings(s); err != nil { + return err + } + } + + return e.App.RefreshSettings() }) - // Register additional commands - app.RootCmd.AddCommand(fakeDataCmd(app)) - app.RootCmd.AddCommand(setFeatureFlagsCmd(app)) - app.RootCmd.AddCommand(setAppURL(app)) - - if err := app.Bootstrap(); err != nil { - return nil, err - } - - if err := MigrateDBs(app); err != nil { - return nil, err - } + app.OnBeforeServe().Add(addRoutes()) return app, nil } diff --git a/app/fakedata.go b/app/fakedata.go index 53cd9b7..e26540c 100644 --- a/app/fakedata.go +++ b/app/fakedata.go @@ -12,10 +12,8 @@ func fakeDataCmd(app core.App) *cobra.Command { cmd := &cobra.Command{ Use: "fake-data", - Run: func(_ *cobra.Command, _ []string) { - if err := fakedata.Generate(app, userCount, ticketCount); err != nil { - app.Logger().Error(err.Error()) - } + RunE: func(_ *cobra.Command, _ []string) error { + return fakedata.Generate(app, userCount, ticketCount) }, } diff --git a/app/flags.go b/app/flags.go index 5ba1340..1752d51 100644 --- a/app/flags.go +++ b/app/flags.go @@ -6,7 +6,6 @@ import ( "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/models" - "github.com/spf13/cobra" "github.com/SecurityBrewery/catalyst/migrations" ) @@ -85,35 +84,3 @@ func SetFlags(app core.App, args []string) error { return nil } - -func setFeatureFlagsCmd(app core.App) *cobra.Command { - return &cobra.Command{ - Use: "set-feature-flags", - Run: func(_ *cobra.Command, args []string) { - if err := SetFlags(app, args); err != nil { - app.Logger().Error(err.Error()) - } - }, - } -} - -func setAppURL(app core.App) *cobra.Command { - return &cobra.Command{ - Use: "set-app-url", - Run: func(_ *cobra.Command, args []string) { - if len(args) != 1 { - app.Logger().Error("missing app url") - - return - } - - settings := app.Settings() - - settings.Meta.AppUrl = args[0] - - if err := app.Dao().SaveSettings(settings); err != nil { - app.Logger().Error(err.Error()) - } - }, - } -} diff --git a/testing/testapp.go b/testing/testapp.go index 3a3651a..1e1b0a8 100644 --- a/testing/testapp.go +++ b/testing/testapp.go @@ -26,6 +26,10 @@ func App(t *testing.T) (*pocketbase.PocketBase, *Counter, func()) { t.Fatal(err) } + if err := baseApp.Bootstrap(); err != nil { + t.Fatal(fmt.Errorf("failed to bootstrap: %w", err)) + } + baseApp.Settings().Logs.MaxDays = 0 defaultTestData(t, baseApp)