package add import ( "errors" "fmt" "log" "os" "strings" "github.com/manifoldco/promptui" "github.com/urfave/cli/v2" "gitnet.fr/deblan/budget/database/manager" "gitnet.fr/deblan/budget/database/model" ) type promptContent struct { errorMsg string label string } func promptGetInput(pc promptContent) string { validate := func(input string) error { if len(input) <= 0 { return errors.New(pc.errorMsg) } return nil } templates := &promptui.PromptTemplates{ Prompt: "{{ . }} ", Valid: "{{ . | green }} ", Invalid: "{{ . | red }} ", Success: "{{ . | bold }} ", } prompt := promptui.Prompt{ Label: pc.label, Templates: templates, Validate: validate, } result, err := prompt.Run() if err != nil { log.Fatal(err) os.Exit(1) } return strings.TrimSpace(result) } func Command(cCtx *cli.Context) error { username := promptGetInput(promptContent{ "Please provide a username.", "Username:", }) password := promptGetInput(promptContent{ "Please provide a password.", "Password:", }) displayName := promptGetInput(promptContent{ "Please provide a display name.", "Display name:", }) var count int64 db := manager.Get() db.Db.Model(model.User{}).Where("username = ?", username).Count(&count) if count > 0 { fmt.Print("User already exists!\n") os.Exit(1) } user := model.NewUser(username, password, displayName) db.Db.Create(user) return nil }