diff options
author | T <t@tjp.lol> | 2025-08-05 11:37:02 -0600 |
---|---|---|
committer | T <t@tjp.lol> | 2025-08-05 11:37:08 -0600 |
commit | 665bd389a0a1c8adadcaa1122e846cc81f5ead31 (patch) | |
tree | f34f9ec77891308c600c680683f60951599429c3 /internal/commands/add_client.go | |
parent | dc895cec9d8a84af89ce2501db234dff33c757e2 (diff) |
WIP TUI
Diffstat (limited to 'internal/commands/add_client.go')
-rw-r--r-- | internal/commands/add_client.go | 60 |
1 files changed, 13 insertions, 47 deletions
diff --git a/internal/commands/add_client.go b/internal/commands/add_client.go index e35eba9..98aec3d 100644 --- a/internal/commands/add_client.go +++ b/internal/commands/add_client.go @@ -1,13 +1,10 @@ package commands import ( - "database/sql" "fmt" - "regexp" - "strings" + "punchcard/internal/actions" "punchcard/internal/context" - "punchcard/internal/queries" "github.com/spf13/cobra" ) @@ -19,33 +16,27 @@ func NewAddClientCmd() *cobra.Command { Long: "Add a new client to the database. Name can include email in format 'Name <email@domain.com>'", Args: cobra.RangeArgs(1, 2), RunE: func(cmd *cobra.Command, args []string) error { - name, email := parseNameAndEmail(args) + name := args[0] + var email string + if len(args) > 1 { + email = args[1] + } billableRateFloat, _ := cmd.Flags().GetFloat64("hourly-rate") - billableRate := int64(billableRateFloat * 100) + var billableRate *float64 + if billableRateFloat > 0 { + billableRate = &billableRateFloat + } q := context.GetDB(cmd.Context()) if q == nil { return fmt.Errorf("database not available in context") } - var emailParam sql.NullString - if email != "" { - emailParam = sql.NullString{String: email, Valid: true} - } - - var billableRateParam sql.NullInt64 - if billableRate > 0 { - billableRateParam = sql.NullInt64{Int64: billableRate, Valid: true} - } - - client, err := q.CreateClient(cmd.Context(), queries.CreateClientParams{ - Name: name, - Email: emailParam, - BillableRate: billableRateParam, - }) + a := actions.New(q) + client, err := a.CreateClient(cmd.Context(), name, email, billableRate) if err != nil { - return fmt.Errorf("failed to create client: %w", err) + return err } output := fmt.Sprintf("Created client: %s", client.Name) @@ -63,28 +54,3 @@ func NewAddClientCmd() *cobra.Command { return cmd } - -func parseNameAndEmail(args []string) (string, string) { - nameArg := args[0] - var emailArg string - if len(args) > 1 { - emailArg = args[1] - } - - if emailArg != "" { - if matches := emailAndNameRegex.FindStringSubmatch(emailArg); matches != nil { - emailArg = strings.TrimSpace(matches[2]) - } - } - - if matches := emailAndNameRegex.FindStringSubmatch(nameArg); matches != nil { - nameArg = strings.TrimSpace(matches[1]) - if emailArg == "" { - emailArg = strings.TrimSpace(matches[2]) - } - } - - return nameArg, emailArg -} - -var emailAndNameRegex = regexp.MustCompile(`^(.+?)<([^>]+@[^>]+)>$`) |