192 lines
4.3 KiB
Go
192 lines
4.3 KiB
Go
package cmd
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
|
|
clis "github.com/mayswind/lab/pkg/cli"
|
|
"github.com/mayswind/lab/pkg/log"
|
|
"github.com/mayswind/lab/pkg/utils"
|
|
)
|
|
|
|
// UserData represents the data command
|
|
var UserData = &cli.Command{
|
|
Name: "userdata",
|
|
Usage: "lab user data maintenance",
|
|
Subcommands: []*cli.Command{
|
|
{
|
|
Name: "user-get",
|
|
Usage: "Get specified user info",
|
|
Action: getUserInfo,
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "username",
|
|
Aliases: []string{"n"},
|
|
Usage: "Specific user name",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: "user-delete",
|
|
Usage: "Delete specified user",
|
|
Action: deleteUser,
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "username",
|
|
Aliases: []string{"n"},
|
|
Usage: "Specific user name",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: "transaction-check",
|
|
Usage: "Check whether user all transactions and accounts are correct",
|
|
Action: checkUserTransactionAndAccount,
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "username",
|
|
Aliases: []string{"n"},
|
|
Usage: "Specific user name",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: "transaction-export",
|
|
Usage: "Export user all transactions to csv file",
|
|
Action: exportUserTransaction,
|
|
Flags: []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "username",
|
|
Aliases: []string{"n"},
|
|
Usage: "Specific user name",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "file",
|
|
Aliases: []string{"f"},
|
|
Usage: "Specific exported file path (e.g. transaction.csv)",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
func getUserInfo(c *cli.Context) error {
|
|
_, err := initializeSystem(c)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
userName := c.String("username")
|
|
user, err := clis.UserData.GetUserByUsername(c, userName)
|
|
|
|
if err != nil {
|
|
log.BootErrorf("[user_data.getUserInfo] error occurs when getting user data")
|
|
return err
|
|
}
|
|
|
|
utils.PrintObjectFields(user)
|
|
|
|
return nil
|
|
}
|
|
|
|
func deleteUser(c *cli.Context) error {
|
|
_, err := initializeSystem(c)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
userName := c.String("username")
|
|
err = clis.UserData.DeleteUser(c, userName)
|
|
|
|
if err != nil {
|
|
log.BootErrorf("[user_data.deleteUser] error occurs when deleting user")
|
|
return err
|
|
}
|
|
|
|
log.BootInfof("[user_data.deleteUser] user \"%s\" has been deleted", userName)
|
|
|
|
return nil
|
|
}
|
|
|
|
func checkUserTransactionAndAccount(c *cli.Context) error {
|
|
_, err := initializeSystem(c)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
userName := c.String("username")
|
|
uid, err := clis.UserData.GetUserIdByUsername(c, userName)
|
|
|
|
if err != nil {
|
|
log.BootErrorf("[user_data.checkUserTransactionAndAccount] error occurs when getting user id by user name")
|
|
return err
|
|
}
|
|
|
|
log.BootInfof("[user_data.checkUserTransactionAndAccount] starting checking user \"%s\" data", userName)
|
|
|
|
_, err = clis.UserData.CheckTransactionAndAccount(c, uid)
|
|
|
|
if err != nil {
|
|
log.BootErrorf("[user_data.checkUserTransactionAndAccount] error occurs when checking user data")
|
|
return err
|
|
}
|
|
|
|
log.BootInfof("[user_data.checkUserTransactionAndAccount] user transactions and accounts data has been checked successfully, there is no problem with user data")
|
|
|
|
return nil
|
|
}
|
|
|
|
func exportUserTransaction(c *cli.Context) error {
|
|
_, err := initializeSystem(c)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
userName := c.String("username")
|
|
uid, err := clis.UserData.GetUserIdByUsername(c, userName)
|
|
|
|
if err != nil {
|
|
log.BootErrorf("[user_data.exportUserTransaction] error occurs when getting user id by user name")
|
|
return err
|
|
}
|
|
|
|
filePath := c.String("file")
|
|
|
|
if filePath == "" {
|
|
log.BootErrorf("[user_data.exportUserTransaction] export file path is not specified")
|
|
return os.ErrNotExist
|
|
}
|
|
|
|
fileExists, err := utils.IsExists(filePath)
|
|
|
|
if fileExists {
|
|
log.BootErrorf("[user_data.exportUserTransaction] specified file path already exists")
|
|
return os.ErrExist
|
|
}
|
|
|
|
log.BootInfof("[user_data.exportUserTransaction] starting exporting user \"%s\" data", userName)
|
|
|
|
content, err := clis.UserData.ExportTransaction(c, uid)
|
|
|
|
if err != nil {
|
|
log.BootErrorf("[user_data.exportUserTransaction] error occurs when exporting user data")
|
|
return err
|
|
}
|
|
|
|
err = utils.WriteFile(filePath, content)
|
|
|
|
if err != nil {
|
|
log.BootErrorf("[user_data.exportUserTransaction] failed to write to %s", filePath)
|
|
return err
|
|
}
|
|
|
|
log.BootInfof("[user_data.exportUserTransaction] user transactions have been exported to %s", filePath)
|
|
|
|
return nil
|
|
}
|