3
0

Refactor seeder CLI commands and init DAL modules

Closes #474
This commit is contained in:
Denis Arh 2022-11-16 18:51:29 +01:00
parent abeed75c9a
commit a8081d46c4
2 changed files with 110 additions and 119 deletions

View File

@ -1,20 +0,0 @@
package commands
import (
"context"
"github.com/cortezaproject/corteza/server/pkg/cli"
"github.com/spf13/cobra"
)
type (
serviceInitializer interface {
InitServices(ctx context.Context) error
}
)
func commandPreRunInitService(app serviceInitializer) func(*cobra.Command, []string) error {
return func(_ *cobra.Command, _ []string) error {
return app.InitServices(cli.Context())
}
}

View File

@ -2,9 +2,8 @@ package commands
import (
"context"
"fmt"
"github.com/cortezaproject/corteza/server/compose/types"
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"
@ -12,72 +11,97 @@ import (
"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(
users(ctx, app),
records(ctx, app),
deleteAll(ctx, app),
cmdUsers(),
cmdRecords(),
cmdDelete(),
)
return cmd
}
func users(ctx context.Context, app serviceInitializer) (cmd *cobra.Command) {
func cmdUsers() (cmd *cobra.Command) {
var (
limit int
)
cmd = &cobra.Command{
Use: "users [action]",
Short: "Seed users",
ValidArgs: []string{"create", "delete"},
Args: cobra.MinimumNArgs(1),
PreRunE: commandPreRunInitService(app),
Run: func(cmd *cobra.Command, args []string) {
var (
seed = seeder.Seeder(ctx, seeder.DefaultStore, dal.Service(), seeder.Faker())
err error
)
action := args[0]
switch action {
case "create":
userIDs, err := seed.CreateUser(seeder.Params{Limit: limit})
cli.HandleError(err)
fmt.Fprintf(
cmd.OutOrStdout(),
" Created %d users\n",
len(userIDs),
)
break
case "delete":
err = seed.DeleteAllUser()
cli.HandleError(err)
fmt.Fprintf(
cmd.OutOrStdout(),
" Deleted all users\n",
)
break
}
},
Use: "users",
Short: "Seed users",
Args: cobra.MaximumNArgs(0),
}
cmd.Flags().IntVarP(&limit, "limit", "l", 1, "How many users to be created")
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 records(ctx context.Context, app serviceInitializer) (cmd *cobra.Command) {
func cmdRecords() (cmd *cobra.Command) {
var (
namespaceID int
moduleID int
@ -85,56 +109,53 @@ func records(ctx context.Context, app serviceInitializer) (cmd *cobra.Command) {
params = seeder.RecordParams{}
)
cmd = &cobra.Command{
Use: "records [action]",
Use: "records",
Short: "Seed records",
Args: cobra.MinimumNArgs(1),
ValidArgs: []string{"create", "delete"},
PreRunE: commandPreRunInitService(app),
Run: func(cmd *cobra.Command, args []string) {
var (
seed = seeder.Seeder(ctx, seeder.DefaultStore, dal.Service(), seeder.Faker())
err error
)
params.NamespaceID = uint64(namespaceID)
params.ModuleID = uint64(moduleID)
switch args[0] {
case "create":
recordIDs, err := seed.CreateRecord(params)
cli.HandleError(err)
fmt.Fprintf(
cmd.OutOrStdout(),
" Created %d records\n",
len(recordIDs),
)
break
case "delete":
err = seed.DeleteAllRecord(&types.Module{})
cli.HandleError(err)
fmt.Fprintf(
cmd.OutOrStdout(),
" Deleted all records\n",
)
break
}
},
}
cmd.Flags().IntVarP(&params.Limit, "limit", "l", 1, "How many users to be created")
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(&params.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
cmd.Flags().IntVarP(&namespaceID, "namespace-id", "n", 0, "namespace id for recode creation")
cmd.Flags().StringVarP(&params.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(&params.ModuleHandle, "module-handle", "b", "", "module handle for recode creation")
cmdCreate.Flags().IntVarP(&namespaceID, "namespace-id", "n", 0, "namespace id for recode creation")
cmdCreate.Flags().StringVarP(&params.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(&params.ModuleHandle, "module-handle", "b", "", "module handle for recode creation")
return cmd
}
func deleteAll(ctx context.Context, app serviceInitializer) (cmd *cobra.Command) {
func cmdDelete() (cmd *cobra.Command) {
var (
namespaceID int
moduleID int
@ -142,25 +163,15 @@ func deleteAll(ctx context.Context, app serviceInitializer) (cmd *cobra.Command)
params = seeder.RecordParams{}
)
cmd = &cobra.Command{
Use: "delete",
Short: "delete all seeded data",
PreRunE: commandPreRunInitService(app),
Use: "delete",
Short: "delete all seeded data",
Run: func(cmd *cobra.Command, args []string) {
var (
seed = seeder.Seeder(ctx, seeder.DefaultStore, dal.Service(), seeder.Faker())
err error
)
params.NamespaceID = uint64(namespaceID)
params.ModuleID = uint64(moduleID)
err = seed.DeleteAll(&params)
cli.HandleError(err)
cli.HandleError(svc.DeleteAll(&params))
fmt.Fprintf(
cmd.OutOrStdout(),
" Deleted all fake data\n",
)
cmd.Println(" Deleted all fake data")
},
}