From 348bed02e9a7db2239208e60c0d44a4093916a22 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Tue, 28 Nov 2023 15:58:08 -0300 Subject: [PATCH] top-level cli command that handles the output of nak. --- cmd/eventstore/main.go | 9 ++++-- cmd/eventstore/put.go | 5 +++ cmd/eventstore/query-or-put.go | 59 ++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 cmd/eventstore/query-or-put.go diff --git a/cmd/eventstore/main.go b/cmd/eventstore/main.go index 5342494..1b2fc90 100644 --- a/cmd/eventstore/main.go +++ b/cmd/eventstore/main.go @@ -23,9 +23,10 @@ var app = &cli.App{ UsageText: "eventstore -d ./data/sqlite ...", Flags: []cli.Flag{ &cli.PathFlag{ - Name: "store", - Aliases: []string{"d"}, - Usage: "path to the database file or directory or database connection uri", + Name: "store", + Aliases: []string{"d"}, + Usage: "path to the database file or directory or database connection uri", + Required: true, }, &cli.StringFlag{ Name: "type", @@ -85,10 +86,12 @@ var app = &cli.App{ return db.Init() }, Commands: []*cli.Command{ + queryOrPut, query, put, del, }, + DefaultCommand: "query-or-put", } func main() { diff --git a/cmd/eventstore/put.go b/cmd/eventstore/put.go index db78566..0010704 100644 --- a/cmd/eventstore/put.go +++ b/cmd/eventstore/put.go @@ -1,6 +1,9 @@ package main import ( + "fmt" + "os" + "github.com/mailru/easyjson" "github.com/nbd-wtf/go-nostr" "github.com/urfave/cli/v2" @@ -22,6 +25,8 @@ var put = &cli.Command{ lineProcessingError(c, "failed to save event '%s': %s", line, err) continue } + + fmt.Fprintf(os.Stderr, "saved %s", event.ID) } exitIfLineProcessingError(c) diff --git a/cmd/eventstore/query-or-put.go b/cmd/eventstore/query-or-put.go new file mode 100644 index 0000000..9d356d3 --- /dev/null +++ b/cmd/eventstore/query-or-put.go @@ -0,0 +1,59 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/nbd-wtf/go-nostr" + "github.com/urfave/cli/v2" +) + +var queryOrPut = &cli.Command{ + Hidden: true, + Name: "query-or-put", + Action: func(c *cli.Context) error { + line := getStdin() + + ee := &nostr.EventEnvelope{} + re := &nostr.ReqEnvelope{} + e := &nostr.Event{} + f := &nostr.Filter{} + if json.Unmarshal([]byte(line), ee) == nil && ee.Event.ID != "" { + e = &ee.Event + return doPut(c, line, e) + } + if json.Unmarshal([]byte(line), e) == nil && e.ID != "" { + return doPut(c, line, e) + } + if json.Unmarshal([]byte(line), re) == nil && len(re.Filters) > 0 { + f = &re.Filters[0] + return doQuery(c, f) + } + if json.Unmarshal([]byte(line), f) == nil && len(f.String()) > 2 { + return doQuery(c, f) + } + + return fmt.Errorf("couldn't parse input '%s'", line) + }, +} + +func doPut(c *cli.Context, line string, e *nostr.Event) error { + if err := db.SaveEvent(c.Context, e); err != nil { + return fmt.Errorf("failed to save event '%s': %s", line, err) + } + fmt.Fprintf(os.Stderr, "saved %s", e.ID) + return nil +} + +func doQuery(c *cli.Context, f *nostr.Filter) error { + ch, err := db.QueryEvents(c.Context, *f) + if err != nil { + return fmt.Errorf("error querying: %w", err) + } + + for evt := range ch { + fmt.Println(evt) + } + return nil +}