From 5b6a50dfb8ea880c4ed77e55020dea3fd0c9a0a2 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Sat, 16 May 2026 14:09:04 -0400 Subject: cli: rename orders->jobs, sort by timestamp --- cmd/lulu/cli.go | 4 ++-- cmd/lulu/jobs.go | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ cmd/lulu/orders.go | 63 -------------------------------------------------- 3 files changed, 69 insertions(+), 65 deletions(-) create mode 100644 cmd/lulu/jobs.go delete mode 100644 cmd/lulu/orders.go (limited to 'cmd') diff --git a/cmd/lulu/cli.go b/cmd/lulu/cli.go index 7a952ed..deedb92 100644 --- a/cmd/lulu/cli.go +++ b/cmd/lulu/cli.go @@ -26,8 +26,8 @@ type CLI struct { ValidateCover ValidateCoverCmd `cmd name:"vc" help:"Validate cover file"` CoverDimensions CoverDimensionsCmd `cmd name:"cd" help:"Calculate cover dimensions"` Cost CostCmd `cmd help:"Calculate the cost of a print job"` - Orders OrdersCmd `cmd help:"Retrieve past print jobs"` - //TODO Info InfoCmd `cmd help:"Retrieve information about an order"` + Jobs JobsCmd `cmd help:"Retrieve past print jobs"` + //TODO Info JobCmd `cmd help:"Retrieve information about a particular print job"` List ListCmd `cmd help:"Print a list of valid argument values"` } diff --git a/cmd/lulu/jobs.go b/cmd/lulu/jobs.go new file mode 100644 index 0000000..f56c3e0 --- /dev/null +++ b/cmd/lulu/jobs.go @@ -0,0 +1,67 @@ +package main + +import ( + "fmt" + "os" + "slices" + "text/tabwriter" + "time" + + "git.samanthony.xyz/lulu" +) + +type JobsCmd struct { + CreatedAfter time.Time `help:"Include only orders created after this *time"` + CreatedBefore time.Time `help:"Include only orders created before this *time"` + ModifiedAfter time.Time `help:"Include only orders modified after this *time"` + ModifiedBefore time.Time `help:"Include only orders modified before this *time"` + Status lulu.OrderStatus `help:"${order_status_help}"` +} + +func (cmd JobsCmd) Run(clnt *lulu.Client) error { + jobs, err := clnt.GetPrintJobs(cmd.queries()...) + if err != nil { + return err + } + if len(jobs) == 0 { + fmt.Fprintf(os.Stderr, "lulu: no orders\n") + return nil + } + slices.SortFunc(jobs, func(a, b lulu.PrintJob) int { + return a.Created.Compare(b.Created) + }) + + w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.AlignRight) + fmt.Fprintf(w, "created\textid\tid\torderid\tnitems\ttotal\tstatus\t\n") + for _, job := range jobs { + fmt.Fprintf(w, "%s\t%s\t%d\t%s\t%d\t%s\t%s\t\n", + job.Created.UTC().Format(time.RFC3339), + job.ExternalId, + job.Id, + job.OrderId, + len(job.LineItems), + fmt.Sprintf("%s%s", job.Cost.TotalCostInclTax, job.Cost.Currency), + job.Status.Status) + } + return w.Flush() +} + +func (cmd JobsCmd) queries() []lulu.PrintJobQuery { + var queries []lulu.PrintJobQuery + if !cmd.CreatedAfter.IsZero() { + queries = append(queries, lulu.FilterCreatedAfter(cmd.CreatedAfter)) + } + if !cmd.CreatedBefore.IsZero() { + queries = append(queries, lulu.FilterCreatedBefore(cmd.CreatedBefore)) + } + if !cmd.ModifiedAfter.IsZero() { + queries = append(queries, lulu.FilterModifiedAfter(cmd.ModifiedAfter)) + } + if !cmd.ModifiedBefore.IsZero() { + queries = append(queries, lulu.FilterModifiedBefore(cmd.ModifiedBefore)) + } + if cmd.Status != "" { + queries = append(queries, lulu.FilterStatus(cmd.Status)) + } + return queries +} diff --git a/cmd/lulu/orders.go b/cmd/lulu/orders.go deleted file mode 100644 index bbbf465..0000000 --- a/cmd/lulu/orders.go +++ /dev/null @@ -1,63 +0,0 @@ -package main - -import ( - "fmt" - "os" - "text/tabwriter" - "time" - - "git.samanthony.xyz/lulu" -) - -type OrdersCmd struct { - CreatedAfter time.Time `help:"Include only orders created after this *time"` - CreatedBefore time.Time `help:"Include only orders created before this *time"` - ModifiedAfter time.Time `help:"Include only orders modified after this *time"` - ModifiedBefore time.Time `help:"Include only orders modified before this *time"` - Status lulu.OrderStatus `help:"${order_status_help}"` -} - -func (cmd OrdersCmd) Run(clnt *lulu.Client) error { - jobs, err := clnt.GetPrintJobs(cmd.queries()...) - if err != nil { - return err - } - if len(jobs) == 0 { - fmt.Fprintf(os.Stderr, "lulu: no orders\n") - return nil - } - - w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', tabwriter.AlignRight) - fmt.Fprintf(w, "created\textid\tid\torderid\tnitems\ttotal\tstatus\t\n") - for _, job := range jobs { - fmt.Fprintf(w, "%s\t%s\t%d\t%s\t%d\t%s\t%s\t\n", - job.Created.UTC().Format(time.RFC3339), - job.ExternalId, - job.Id, - job.OrderId, - len(job.LineItems), - fmt.Sprintf("%s%s", job.Cost.TotalCostInclTax, job.Cost.Currency), - job.Status.Status) - } - return w.Flush() -} - -func (cmd OrdersCmd) queries() []lulu.PrintJobQuery { - var queries []lulu.PrintJobQuery - if !cmd.CreatedAfter.IsZero() { - queries = append(queries, lulu.FilterCreatedAfter(cmd.CreatedAfter)) - } - if !cmd.CreatedBefore.IsZero() { - queries = append(queries, lulu.FilterCreatedBefore(cmd.CreatedBefore)) - } - if !cmd.ModifiedAfter.IsZero() { - queries = append(queries, lulu.FilterModifiedAfter(cmd.ModifiedAfter)) - } - if !cmd.ModifiedBefore.IsZero() { - queries = append(queries, lulu.FilterModifiedBefore(cmd.ModifiedBefore)) - } - if cmd.Status != "" { - queries = append(queries, lulu.FilterStatus(cmd.Status)) - } - return queries -} -- cgit v1.2.3