diff --git a/server/app/cli.go b/server/app/cli.go index d369fdc34..0db86b67d 100644 --- a/server/app/cli.go +++ b/server/app/cli.go @@ -3,6 +3,8 @@ package app import ( "context" "fmt" + composeCommands "github.com/cortezaproject/corteza/server/compose/commands" + "github.com/cortezaproject/corteza/server/pkg/seeder" "sync" authCommands "github.com/cortezaproject/corteza/server/auth/commands" @@ -11,7 +13,6 @@ import ( "github.com/cortezaproject/corteza/server/pkg/api/server" "github.com/cortezaproject/corteza/server/pkg/cli" "github.com/cortezaproject/corteza/server/pkg/options" - fakerCommands "github.com/cortezaproject/corteza/server/pkg/seeder/commands" "github.com/cortezaproject/corteza/server/store" systemCommands "github.com/cortezaproject/corteza/server/system/commands" "go.uber.org/zap" @@ -132,7 +133,10 @@ func (app *CortezaApp) InitCLI() { federationCommands.Sync(ctx, app), cli.EnvCommand(), cli.VersionCommand(), - fakerCommands.Seeder(ctx, app), + seeder.BaseCommand( + systemCommands.SeedUsers(ctx, app), + composeCommands.SeedRecords(ctx, app), + ), ) } diff --git a/server/compose/commands/seeder.go b/server/compose/commands/seeder.go new file mode 100644 index 000000000..e46c07b7c --- /dev/null +++ b/server/compose/commands/seeder.go @@ -0,0 +1,96 @@ +package commands + +import ( + "context" + "github.com/cortezaproject/corteza/server/compose/service" + "github.com/cortezaproject/corteza/server/compose/types" + "github.com/cortezaproject/corteza/server/pkg/cli" + "github.com/cortezaproject/corteza/server/pkg/dal" + "github.com/cortezaproject/corteza/server/pkg/seeder" + + "github.com/spf13/cobra" +) + +type ( + serviceInitializer interface { + InitServices(ctx context.Context) error + } + + seederService interface { + CreateUser(seeder.Params) ([]uint64, error) + CreateRecord(seeder.RecordParams) ([]uint64, error) + DeleteAllUser() error + DeleteAllRecord(*types.Module) error + DeleteAll(*seeder.RecordParams) (err error) + } +) + +var ( + svc seederService +) + +func SeedRecords(ctx context.Context, app serviceInitializer) (cmd *cobra.Command) { + var ( + namespaceID int + moduleID int + + params = seeder.RecordParams{} + ) + cmd = &cobra.Command{ + Use: "records", + Short: "Seed records", + + PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { + if err = app.InitServices(cli.Context()); err != nil { + return err + } + + cmd.Println("compose:PersistentPreRunE") + if err = service.Activate(ctx); err != nil { + return err + } + + svc = seeder.Seeder(ctx, seeder.DefaultStore, dal.Service(), seeder.Faker()) + return nil + }, + } + + cmd.AddCommand( + &cobra.Command{ + Use: "create", + Short: "Create users", + Args: cobra.MaximumNArgs(0), + Run: func(cmd *cobra.Command, args []string) { + params.NamespaceID = uint64(namespaceID) + params.ModuleID = uint64(moduleID) + + userIDs, err := svc.CreateRecord(params) + cli.HandleError(err) + + cmd.Printf(" Created %d records", len(userIDs)) + cmd.Println() + }, + }, + &cobra.Command{ + Use: "delete", + Short: "Delete records", + Args: cobra.MaximumNArgs(0), + Run: func(cmd *cobra.Command, args []string) { + cli.HandleError(svc.DeleteAllRecord(&types.Module{})) + + cmd.Println(" Deleted all records") + + }, + }, + ) + + cmdCreate := cmd.Commands()[0] + cmdCreate.Flags().IntVarP(¶ms.Limit, "limit", "l", 1, "How many records to be created") + // @todo: Can be improved by adding one flag which accept string(handle) or id(int) for namespace and module + cmdCreate.Flags().IntVarP(&namespaceID, "namespace-id", "n", 0, "namespace id for recode creation") + cmdCreate.Flags().StringVarP(¶ms.NamespaceHandle, "namespace-handle", "a", "", "namespace handle for recode creation") + cmdCreate.Flags().IntVarP(&moduleID, "module-id", "m", 0, "module id for recode creation") + cmdCreate.Flags().StringVarP(¶ms.ModuleHandle, "module-handle", "b", "", "module handle for recode creation") + + return cmd +} diff --git a/server/pkg/seeder/command.go b/server/pkg/seeder/command.go new file mode 100644 index 000000000..0168c1fe5 --- /dev/null +++ b/server/pkg/seeder/command.go @@ -0,0 +1,19 @@ +package seeder + +import ( + "github.com/spf13/cobra" +) + +// BaseCommand returns a base command for seeder +// +// Used by app init procedure +func BaseCommand(sub ...*cobra.Command) *cobra.Command { + cmd := &cobra.Command{ + Use: "seeder", + Short: "Seeds fake data", + Long: "Generates fake data for user and records", + } + + cmd.AddCommand(sub...) + return cmd +} diff --git a/server/pkg/seeder/commands/seeder.go b/server/pkg/seeder/commands/seeder.go deleted file mode 100644 index 0b6ef5e46..000000000 --- a/server/pkg/seeder/commands/seeder.go +++ /dev/null @@ -1,186 +0,0 @@ -package commands - -import ( - "context" - cService "github.com/cortezaproject/corteza/server/compose/service" - cTypes "github.com/cortezaproject/corteza/server/compose/types" - "github.com/cortezaproject/corteza/server/pkg/cli" - "github.com/cortezaproject/corteza/server/pkg/dal" - "github.com/cortezaproject/corteza/server/pkg/seeder" - - "github.com/spf13/cobra" -) - -type ( - serviceInitializer interface { - InitServices(ctx context.Context) error - } - - seederService interface { - CreateUser(seeder.Params) ([]uint64, error) - CreateRecord(seeder.RecordParams) ([]uint64, error) - DeleteAllUser() error - DeleteAllRecord(*cTypes.Module) error - DeleteAll(*seeder.RecordParams) (err error) - } -) - -var ( - svc seederService -) - -func Seeder(ctx context.Context, app serviceInitializer) *cobra.Command { - cmd := &cobra.Command{ - Use: "seeder", - Short: "Seeds fake data", - Long: "Generates fake data for user and records", - - PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { - if err = app.InitServices(cli.Context()); err != nil { - return err - } - - if err = cService.Activate(ctx); err != nil { - return err - } - - svc = seeder.Seeder(ctx, seeder.DefaultStore, dal.Service(), seeder.Faker()) - return nil - }, - } - - // @todo improve cli command with sub-command - cmd.AddCommand( - cmdUsers(), - cmdRecords(), - cmdDelete(), - ) - - return cmd -} - -func cmdUsers() (cmd *cobra.Command) { - var ( - limit int - ) - cmd = &cobra.Command{ - Use: "users", - Short: "Seed users", - Args: cobra.MaximumNArgs(0), - } - - cmd.AddCommand( - &cobra.Command{ - Use: "create", - Short: "Create users", - Args: cobra.MaximumNArgs(0), - Run: func(cmd *cobra.Command, args []string) { - userIDs, err := svc.CreateUser(seeder.Params{Limit: limit}) - cli.HandleError(err) - - cmd.Printf(" Created %d users", len(userIDs)) - cmd.Println() - }, - }, - &cobra.Command{ - Use: "delete", - Short: "Delete users", - Args: cobra.MaximumNArgs(0), - Run: func(cmd *cobra.Command, args []string) { - cli.HandleError(svc.DeleteAllUser()) - - cmd.Println(" Deleted all users") - - }, - }, - ) - - cmdCreate := cmd.Commands()[0] - cmdCreate.Flags().IntVarP(&limit, "limit", "l", 1, "How many users to be created") - - return cmd -} - -func cmdRecords() (cmd *cobra.Command) { - var ( - namespaceID int - moduleID int - - params = seeder.RecordParams{} - ) - cmd = &cobra.Command{ - Use: "records", - Short: "Seed records", - Args: cobra.MinimumNArgs(1), - ValidArgs: []string{"create", "delete"}, - } - - cmd.AddCommand( - &cobra.Command{ - Use: "create", - Short: "Create records", - Args: cobra.MaximumNArgs(0), - Run: func(cmd *cobra.Command, args []string) { - params.NamespaceID = uint64(namespaceID) - params.ModuleID = uint64(moduleID) - - userIDs, err := svc.CreateRecord(params) - cli.HandleError(err) - - cmd.Printf(" Created %d records", len(userIDs)) - cmd.Println() - }, - }, - &cobra.Command{ - Use: "delete", - Short: "Delete records", - Args: cobra.MaximumNArgs(0), - Run: func(cmd *cobra.Command, args []string) { - cli.HandleError(svc.DeleteAllRecord(&cTypes.Module{})) - - cmd.Println(" Deleted all records") - - }, - }, - ) - - cmdCreate := cmd.Commands()[0] - cmdCreate.Flags().IntVarP(¶ms.Limit, "limit", "l", 1, "How many records to be created") - // @todo: Can be improved by adding one flag which accept string(handle) or id(int) for namespace and module - cmdCreate.Flags().IntVarP(&namespaceID, "namespace-id", "n", 0, "namespace id for recode creation") - cmdCreate.Flags().StringVarP(¶ms.NamespaceHandle, "namespace-handle", "a", "", "namespace handle for recode creation") - cmdCreate.Flags().IntVarP(&moduleID, "module-id", "m", 0, "module id for recode creation") - cmdCreate.Flags().StringVarP(¶ms.ModuleHandle, "module-handle", "b", "", "module handle for recode creation") - - return cmd -} - -func cmdDelete() (cmd *cobra.Command) { - var ( - namespaceID int - moduleID int - - params = seeder.RecordParams{} - ) - cmd = &cobra.Command{ - Use: "delete", - Short: "delete all seeded data", - Run: func(cmd *cobra.Command, args []string) { - params.NamespaceID = uint64(namespaceID) - params.ModuleID = uint64(moduleID) - - cli.HandleError(svc.DeleteAll(¶ms)) - - cmd.Println(" Deleted all fake data") - }, - } - - cmd.Flags().IntVarP(¶ms.Limit, "limit", "l", 1, "How many users to be created") - // @todo: Can be improved by adding one flag which accept string(handle) or id(int) for namespace and module - cmd.Flags().IntVarP(&namespaceID, "namespace-id", "n", 0, "namespace id for recode creation") - cmd.Flags().StringVarP(¶ms.NamespaceHandle, "namespace-handle", "a", "", "namespace handle for recode creation") - cmd.Flags().IntVarP(&moduleID, "module-id", "m", 0, "module id for recode creation") - cmd.Flags().StringVarP(¶ms.ModuleHandle, "module-handle", "b", "", "module handle for recode creation") - - return cmd -} diff --git a/server/system/commands/seeder.go b/server/system/commands/seeder.go new file mode 100644 index 000000000..46cc2f539 --- /dev/null +++ b/server/system/commands/seeder.go @@ -0,0 +1,72 @@ +package commands + +import ( + "context" + "github.com/cortezaproject/corteza/server/pkg/cli" + "github.com/cortezaproject/corteza/server/pkg/dal" + "github.com/cortezaproject/corteza/server/pkg/seeder" + + "github.com/spf13/cobra" +) + +type ( + seederService interface { + CreateUser(seeder.Params) ([]uint64, error) + CreateRecord(seeder.RecordParams) ([]uint64, error) + DeleteAllUser() error + } +) + +var ( + svc seederService +) + +func SeedUsers(ctx context.Context, app serviceInitializer) (cmd *cobra.Command) { + var ( + limit int + ) + cmd = &cobra.Command{ + Use: "users", + Short: "Seed users", + Args: cobra.MaximumNArgs(0), + + PersistentPreRunE: func(cmd *cobra.Command, args []string) (err error) { + if err = app.InitServices(cli.Context()); err != nil { + return err + } + svc = seeder.Seeder(ctx, seeder.DefaultStore, dal.Service(), seeder.Faker()) + return nil + }, + } + + cmd.AddCommand( + &cobra.Command{ + Use: "create", + Short: "Create users", + Args: cobra.MaximumNArgs(0), + Run: func(cmd *cobra.Command, args []string) { + userIDs, err := svc.CreateUser(seeder.Params{Limit: limit}) + cli.HandleError(err) + + cmd.Printf(" Created %d users", len(userIDs)) + cmd.Println() + }, + }, + &cobra.Command{ + Use: "delete", + Short: "Delete users", + Args: cobra.MaximumNArgs(0), + Run: func(cmd *cobra.Command, args []string) { + cli.HandleError(svc.DeleteAllUser()) + + cmd.Println(" Deleted all users") + + }, + }, + ) + + cmdCreate := cmd.Commands()[0] + cmdCreate.Flags().IntVarP(&limit, "limit", "l", 1, "How many users to be created") + + return cmd +}