summaryrefslogtreecommitdiff
path: root/internal/actions/clients.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/actions/clients.go')
-rw-r--r--internal/actions/clients.go31
1 files changed, 28 insertions, 3 deletions
diff --git a/internal/actions/clients.go b/internal/actions/clients.go
index 1a99d59..10e8e7d 100644
--- a/internal/actions/clients.go
+++ b/internal/actions/clients.go
@@ -22,9 +22,8 @@ func (a *actions) CreateClient(ctx context.Context, name, email string, billable
}
var billableRateParam sql.NullInt64
- if billableRate != nil && *billableRate > 0 {
- rate := int64(*billableRate * 100) // Convert dollars to cents
- billableRateParam = sql.NullInt64{Int64: rate, Valid: true}
+ if billableRate != nil {
+ billableRateParam = sql.NullInt64{Int64: int64(*billableRate * 100), Valid: true}
}
client, err := a.queries.CreateClient(ctx, queries.CreateClientParams{
@@ -39,6 +38,32 @@ func (a *actions) CreateClient(ctx context.Context, name, email string, billable
return &client, nil
}
+func (a *actions) EditClient(ctx context.Context, id int64, name, email string, billableRate *float64) (*queries.Client, error) {
+ finalName, finalEmail := parseNameAndEmail(name, email)
+
+ var emailParam sql.NullString
+ if finalEmail != "" {
+ emailParam = sql.NullString{String: finalEmail, Valid: true}
+ }
+
+ var rateParam sql.NullInt64
+ if billableRate != nil {
+ rateParam = sql.NullInt64{Int64: int64(*billableRate * 100), Valid: true}
+ }
+
+ client, err := a.queries.UpdateClient(ctx, queries.UpdateClientParams{
+ Name: finalName,
+ Email: emailParam,
+ BillableRate: rateParam,
+ ID: id,
+ })
+ if err != nil {
+ return nil, fmt.Errorf("failed to update client: %w", err)
+ }
+
+ return &client, nil
+}
+
// FindClient finds a client by name or ID
func (a *actions) FindClient(ctx context.Context, nameOrID string) (*queries.Client, error) {
// Parse as ID if possible, otherwise use 0