feat: better flags
All checks were successful
Go / build (push) Successful in 38s

This commit is contained in:
2025-11-04 21:15:05 +01:00
parent cfbb475a42
commit e5169ee0c4
11 changed files with 57 additions and 731 deletions

View File

@@ -11,29 +11,34 @@ import (
type cmd struct {
cmd func([]string, any)
config any
fs *flag.FlagSet
}
func (c *cmd) Run() {
func (c *cmd) Register(name string) {
c.fs = flag.NewFlagSet(name, flag.ExitOnError)
if c.config != nil {
flag.Parse()
filler := flagsfiller.New()
err := filler.Fill(flag.CommandLine, c.config)
err := filler.Fill(c.fs, c.config)
if err != nil {
log.Fatal(err)
}
c.cmd(flag.Args()[1:], c.config)
} else {
c.cmd(os.Args[2:], c.config)
}
}
var commands = map[string]cmd{
func (c *cmd) Run(name string) {
c.fs.Parse(os.Args[2:])
c.cmd(c.fs.Args(), c.config)
}
var commands = map[string]*cmd{
"request": {
request,
nil,
nil,
},
"create": {
create,
&createFlags{},
nil,
},
}

View File

@@ -8,6 +8,7 @@ import (
"os"
"time"
"code.gitea.io/sdk/gitea"
"git.schreifuchs.ch/lou-taylor/accounting/internal/email"
"git.schreifuchs.ch/lou-taylor/accounting/pkg/invoice"
)
@@ -15,6 +16,7 @@ import (
type createFlags struct {
Email bool `flag:"email" help:"send invoice by email"`
Output string `flag:"o" help:"output file"`
Label string `flag:"l" help:"filters for issues with the label"`
}
func create(arguments []string, c any) {
@@ -33,6 +35,21 @@ func create(arguments []string, c any) {
}
opts := invoice.DefaultOptions
if flags.Label != "" {
opts.IssueState = gitea.StateAll
opts.IssueFilter = func(i *gitea.Issue) bool {
for _, l := range i.Labels {
if l.Name == flags.Label {
return true
}
}
return false
}
}
opts.Since = time.Now().AddDate(-1, 0, 0)
opts.Mindur = time.Duration(req.DurationThreshold)
invoice, report, err := invoicer.Generate(req.Creditor, req.Debtor, req.HourlyRate, repos, &opts)
if err != nil {

View File

@@ -1,20 +1,25 @@
package main
import (
"fmt"
"flag"
"os"
)
func main() {
for n, c := range commands {
c.Register(n)
}
if len(os.Args) < 2 {
flag.PrintDefaults()
return
}
for n, c := range commands {
if os.Args[1] == n {
c.Run()
break
c.Run(n)
return
}
}
fmt.Println("cmd not found")
flag.PrintDefaults()
}

View File

@@ -41,7 +41,7 @@ func getServices() (invoicer *invoice.Service, mailer *email.Service) {
gitea.SetToken(cfg.Gitea.Token),
)
if err != nil {
log.Fatal("could not connect to gitea: %v", err)
log.Fatalf("could not connect to gitea: %v", err)
return invoicer, mailer
}
gotenberg, err := pdf.New(cfg.PDF.Hostname)
@@ -49,12 +49,12 @@ func getServices() (invoicer *invoice.Service, mailer *email.Service) {
panic(err)
}
if err != nil {
log.Fatal("could not connect to gotenberg: %v", err)
log.Fatalf("could not connect to gotenberg: %v", err)
return invoicer, mailer
}
mailer, err = email.New(cfg.Email)
if err != nil {
log.Fatal("could not create mailer: %v", err)
log.Fatalf("could not create mailer: %v", err)
return invoicer, mailer
}