github.com/GGP1/kure@v0.8.4/commands/card/add/add.go (about)

     1  package add
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"io"
     7  	"strings"
     8  
     9  	"github.com/GGP1/kure/auth"
    10  	cmdutil "github.com/GGP1/kure/commands"
    11  	"github.com/GGP1/kure/db/card"
    12  	"github.com/GGP1/kure/pb"
    13  	"github.com/GGP1/kure/terminal"
    14  
    15  	"github.com/spf13/cobra"
    16  	bolt "go.etcd.io/bbolt"
    17  )
    18  
    19  const example = `
    20  * Add a new card
    21  kure card add Sample`
    22  
    23  // NewCmd returns a new command.
    24  func NewCmd(db *bolt.DB, r io.Reader) *cobra.Command {
    25  	return &cobra.Command{
    26  		Use:     "add <name>",
    27  		Short:   "Add a card",
    28  		Aliases: []string{"create", "new"},
    29  		Example: example,
    30  		Args:    cmdutil.MustNotExist(db, cmdutil.Card),
    31  		PreRunE: auth.Login(db),
    32  		RunE:    runAdd(db, r),
    33  	}
    34  }
    35  
    36  func runAdd(db *bolt.DB, r io.Reader) cmdutil.RunEFunc {
    37  	return func(cmd *cobra.Command, args []string) error {
    38  		name := strings.Join(args, " ")
    39  		name = cmdutil.NormalizeName(name)
    40  
    41  		c, err := input(db, name, r)
    42  		if err != nil {
    43  			return err
    44  		}
    45  
    46  		if err := card.Create(db, c); err != nil {
    47  			return err
    48  		}
    49  
    50  		fmt.Printf("\n%q added\n", name)
    51  		return nil
    52  	}
    53  }
    54  
    55  func input(db *bolt.DB, name string, r io.Reader) (*pb.Card, error) {
    56  	reader := bufio.NewReader(r)
    57  	c := &pb.Card{
    58  		Name:         name,
    59  		Type:         terminal.Scanln(reader, "Type"),
    60  		Number:       terminal.Scanln(reader, "Number"),
    61  		SecurityCode: terminal.Scanln(reader, "Security code"),
    62  		ExpireDate:   terminal.Scanln(reader, "Expire date"),
    63  		Notes:        terminal.Scanlns(reader, "Notes"),
    64  	}
    65  
    66  	return c, nil
    67  }