budget-go/cli/user/add/command.go
2024-09-14 23:37:03 +02:00

78 lines
1.4 KiB
Go

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
}