package admin import ( "fmt" "git.devices.local/mawas/golang-api-skeleton/lib/common" "git.devices.local/mawas/golang-api-skeleton/lib/config" "git.devices.local/mawas/golang-api-skeleton/lib/database" "git.devices.local/mawas/golang-api-skeleton/models" "git.devices.local/mawas/golang-api-skeleton/repositories" "git.devices.local/mawas/golang-api-skeleton/services" "github.com/spf13/cobra" "github.com/spf13/viper" ) func Command(appName string, cfgFile string, flagCfg map[string]interface{}) *cobra.Command { var username, firstname, lastname, email string cmd := &cobra.Command{ Use: "admin", Short: "Create admin user if non existent", Long: "Create admin user if non existent", // SilenceUsage: true, // SilenceErrors: true, DisableAutoGenTag: true, RunE: func(cmd *cobra.Command, args []string) error { return createAdminUser(appName, cfgFile, flagCfg, username, firstname, lastname, email) }, } cmd.Flags().StringVarP(&username, "username", "U", "admin", "desired admin user name") cmd.Flags().StringVarP(&firstname, "firstname", "F", "", "admin user fistname") if err := cmd.MarkFlagRequired("firstname"); err != nil { panic(err) } cmd.Flags().StringVarP(&lastname, "lastname", "L", "", "admin user lastname") if err := cmd.MarkFlagRequired("lastname"); err != nil { panic(err) } cmd.Flags().StringVarP(&email, "email", "M", "", "admin user email address") if err := cmd.MarkFlagRequired("email"); err != nil { panic(err) } return cmd } func createAdminUser(appName, cfgFile string, flagCfg map[string]interface{}, username, firstname, lastname, email string) error { if err := config.Initialize(appName, cfgFile, flagCfg); err != nil { return fmt.Errorf("config:%v", err) } db, err := database.Connect(database.Credentials{ Host: viper.GetString("database.host"), Port: viper.GetInt("database.port"), Dialect: viper.GetString("database.dialect"), Database: viper.GetString("database.database"), User: viper.GetString("database.user"), Password: viper.GetString("database.password"), MaxOpenConn: viper.GetInt("database.port"), MaxIdleConn: viper.GetInt("database.port"), MaxLifeTime: viper.GetInt("database.port"), Debug: true, }) if err != nil { return fmt.Errorf("database:%v", err) } if err := db.AutoMigrate(&models.User{}); err != nil { return fmt.Errorf("database:%v", err) } userRepo := repositories.NewUserRepository(db, common.CLIUserID, common.CLIUsername, nil) userService := services.NewUserService(userRepo) adminUser := services.NewUser(username, firstname, lastname, email) adminUser.Active = true _, err = userService.Create([]*models.User{&adminUser}) return err }