From e7b1a29297fe23e46115ba55ac48746447b71747 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 4 Apr 2021 18:22:27 +0800 Subject: [PATCH] support add user by cli --- cmd/user_data.go | 57 ++++++++++++++++++++++++++++++++++++++++++++ pkg/cli/user_data.go | 55 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) diff --git a/cmd/user_data.go b/cmd/user_data.go index 9ca61802..54ee43a4 100644 --- a/cmd/user_data.go +++ b/cmd/user_data.go @@ -15,6 +15,38 @@ var UserData = &cli.Command{ Name: "userdata", Usage: "lab user data maintenance", Subcommands: []*cli.Command{ + { + Name: "user-add", + Usage: "Add new user", + Action: addNewUser, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "username", + Aliases: []string{"n"}, + Usage: "New user name", + }, + &cli.StringFlag{ + Name: "email", + Aliases: []string{"m"}, + Usage: "New user email", + }, + &cli.StringFlag{ + Name: "nickname", + Aliases: []string{"i"}, + Usage: "New user nickname", + }, + &cli.StringFlag{ + Name: "password", + Aliases: []string{"p"}, + Usage: "New user password", + }, + &cli.StringFlag{ + Name: "default-currency", + Aliases: []string{"c"}, + Usage: "New user default currency", + }, + }, + }, { Name: "user-get", Usage: "Get specified user info", @@ -88,6 +120,31 @@ var UserData = &cli.Command{ }, } +func addNewUser(c *cli.Context) error { + _, err := initializeSystem(c) + + if err != nil { + return err + } + + userName := c.String("username") + email := c.String("email") + nickname := c.String("nickname") + password := c.String("password") + defaultCurrency := c.String("default-currency") + + user, err := clis.UserData.AddNewUser(c, userName, email, nickname, password, defaultCurrency) + + if err != nil { + log.BootErrorf("[user_data.addNewUser] error occurs when adding new user") + return err + } + + utils.PrintObjectFields(user) + + return nil +} + func getUserInfo(c *cli.Context) error { _, err := initializeSystem(c) diff --git a/pkg/cli/user_data.go b/pkg/cli/user_data.go index 6b43af0f..2e08365d 100644 --- a/pkg/cli/user_data.go +++ b/pkg/cli/user_data.go @@ -10,6 +10,7 @@ import ( "github.com/mayswind/lab/pkg/log" "github.com/mayswind/lab/pkg/models" "github.com/mayswind/lab/pkg/services" + "github.com/mayswind/lab/pkg/validators" ) const pageCountForGettingTransactions = 1000 @@ -39,6 +40,60 @@ var ( } ) +// AddNewUser adds a new user according to specified info +func (a *UserDataCli) AddNewUser(c *cli.Context, username string, email string, nickname string, password string, defaultCurrency string) (*models.User, error) { + if username == "" { + log.BootErrorf("[user_data.AddNewUser] user name is empty") + return nil, errs.ErrUsernameIsEmpty + } + + if email == "" { + log.BootErrorf("[user_data.AddNewUser] user email is empty") + return nil, errs.ErrEmailIsEmpty + } + + if nickname == "" { + log.BootErrorf("[user_data.AddNewUser] user nickname is empty") + return nil, errs.ErrNicknameIsEmpty + } + + if password == "" { + log.BootErrorf("[user_data.AddNewUser] user password is empty") + return nil, errs.ErrPasswordIsEmpty + } + + if defaultCurrency == "" { + log.BootErrorf("[user_data.AddNewUser] user default currency is empty") + return nil, errs.ErrUserDefaultCurrencyIsEmpty + } + + if _, ok := validators.AllCurrencyNames[defaultCurrency]; !ok { + log.BootErrorf("[user_data.AddNewUser] user default currency is invalid") + return nil, errs.ErrUserDefaultCurrencyIsInvalid + } + + user := &models.User{ + Username: username, + Email: email, + Nickname: nickname, + Password: password, + DefaultCurrency: defaultCurrency, + FirstDayOfWeek: models.WEEKDAY_SUNDAY, + TransactionEditScope: models.TRANSACTION_EDIT_SCOPE_ALL, + } + + err := a.users.CreateUser(user) + + if err != nil { + log.BootErrorf("[user_data.AddNewUser] failed to create user \"%s\", because %s", user.Username, err.Error()) + return nil, err + } + + log.BootInfof( "[user_data.AddNewUser] user \"%s\" has add successfully, uid is %d", user.Username, user.Uid) + + return user, nil +} + // GetUserByUsername returns user by user name func (a *UserDataCli) GetUserByUsername(c *cli.Context, username string) (*models.User, error) { if username == "" {