From e4088e4aec7039816967104b17dfebcede04521b Mon Sep 17 00:00:00 2001 From: Natercio Moniz Date: Fri, 14 Nov 2025 09:52:07 +0000 Subject: [PATCH 1/4] read from stdin and write logs to stderr --- cmd/broker2anexoj-cli/main.go | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/cmd/broker2anexoj-cli/main.go b/cmd/broker2anexoj-cli/main.go index 4ee7bcd..4634ca8 100644 --- a/cmd/broker2anexoj-cli/main.go +++ b/cmd/broker2anexoj-cli/main.go @@ -2,7 +2,6 @@ package main import ( "context" - "fmt" "log/slog" "os" "os/signal" @@ -26,12 +25,8 @@ func run(ctx context.Context) error { eg, ctx := errgroup.WithContext(ctx) - f, err := os.Open("test.csv") - if err != nil { - return fmt.Errorf("open statement: %w", err) - } - - reader := trading212.NewRecordReader(f) + slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, nil))) + reader := trading212.NewRecordReader(os.Stdin) writer := internal.NewStdOutLogger() @@ -39,7 +34,7 @@ func run(ctx context.Context) error { return internal.BuildReport(ctx, reader, writer) }) - err = eg.Wait() + err := eg.Wait() if err != nil { return err } -- 2.49.1 From f356d2f7e127b5bf29adbd29c9a7dfb43884011f Mon Sep 17 00:00:00 2001 From: Natercio Moniz Date: Fri, 14 Nov 2025 14:14:32 +0000 Subject: [PATCH 2/4] rename module to match github repo --- cmd/broker2anexoj-cli/main.go | 4 ++-- go.mod | 2 +- internal/mocks/mocks_gen.go | 4 ++-- internal/report_test.go | 4 ++-- internal/stdout.go | 2 ++ internal/stdout_test.go | 2 +- internal/trading212/record.go | 2 +- internal/trading212/record_test.go | 2 +- 8 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cmd/broker2anexoj-cli/main.go b/cmd/broker2anexoj-cli/main.go index 4634ca8..d7a7310 100644 --- a/cmd/broker2anexoj-cli/main.go +++ b/cmd/broker2anexoj-cli/main.go @@ -6,8 +6,8 @@ import ( "os" "os/signal" - "git.naterciomoniz.net/applications/broker2anexoj/internal" - "git.naterciomoniz.net/applications/broker2anexoj/internal/trading212" + "github.com/nmoniz/any2anexoj/internal" + "github.com/nmoniz/any2anexoj/internal/trading212" "golang.org/x/sync/errgroup" ) diff --git a/go.mod b/go.mod index 12ea300..fbb2545 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module git.naterciomoniz.net/applications/broker2anexoj +module github.com/nmoniz/any2anexoj go 1.25.3 diff --git a/internal/mocks/mocks_gen.go b/internal/mocks/mocks_gen.go index 252e2cb..463d696 100644 --- a/internal/mocks/mocks_gen.go +++ b/internal/mocks/mocks_gen.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: git.naterciomoniz.net/applications/broker2anexoj/internal (interfaces: RecordReader,Record,ReportWriter) +// Source: github.com/nmoniz/any2anexoj/internal (interfaces: RecordReader,Record,ReportWriter) // // Generated by this command: // @@ -15,7 +15,7 @@ import ( reflect "reflect" time "time" - internal "git.naterciomoniz.net/applications/broker2anexoj/internal" + internal "github.com/nmoniz/any2anexoj/internal" gomock "go.uber.org/mock/gomock" ) diff --git a/internal/report_test.go b/internal/report_test.go index 99ecd2f..231b213 100644 --- a/internal/report_test.go +++ b/internal/report_test.go @@ -7,8 +7,8 @@ import ( "testing" "time" - "git.naterciomoniz.net/applications/broker2anexoj/internal" - "git.naterciomoniz.net/applications/broker2anexoj/internal/mocks" + "github.com/nmoniz/any2anexoj/internal" + "github.com/nmoniz/any2anexoj/internal/mocks" "go.uber.org/mock/gomock" ) diff --git a/internal/stdout.go b/internal/stdout.go index 20e36ea..31000a6 100644 --- a/internal/stdout.go +++ b/internal/stdout.go @@ -8,6 +8,8 @@ import ( "time" ) +// ReportLogger writes a simple, human readable, line to the provided io.Writer for each +// ReportItem received. type ReportLogger struct { counter int writer io.Writer diff --git a/internal/stdout_test.go b/internal/stdout_test.go index 7eb600b..5879732 100644 --- a/internal/stdout_test.go +++ b/internal/stdout_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "git.naterciomoniz.net/applications/broker2anexoj/internal" + "github.com/nmoniz/any2anexoj/internal" ) func TestReportLogger_Write(t *testing.T) { diff --git a/internal/trading212/record.go b/internal/trading212/record.go index 2eda2c6..541da5d 100644 --- a/internal/trading212/record.go +++ b/internal/trading212/record.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "git.naterciomoniz.net/applications/broker2anexoj/internal" + "github.com/nmoniz/any2anexoj/internal" ) type Record struct { diff --git a/internal/trading212/record_test.go b/internal/trading212/record_test.go index 3f405bb..10d71b9 100644 --- a/internal/trading212/record_test.go +++ b/internal/trading212/record_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "git.naterciomoniz.net/applications/broker2anexoj/internal" + "github.com/nmoniz/any2anexoj/internal" ) func TestRecordReader_ReadRecord(t *testing.T) { -- 2.49.1 From 14cfe33f95624e4aeec3d78fd458d38cb6d76f18 Mon Sep 17 00:00:00 2001 From: Natercio Moniz Date: Fri, 14 Nov 2025 14:57:10 +0000 Subject: [PATCH 3/4] update readme and platform param --- README.md | 6 ++---- cmd/broker2anexoj-cli/main.go | 29 ++++++++++++++++++++++++++--- go.mod | 1 + go.sum | 2 ++ 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9efb03a..ddcbffc 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,11 @@ This tool converts the statements from brokers and exchanges into a format compa ## Install ```bash -go install git.naterciomoniz.net/applications/broker2anexoj@latest +go install github.com/nmoniz/any2anexoj/cmd/any2anexoj-cli@latest ``` ## Usage ```bash -broker2anexoj +cat statement.csv | broker2anexoj --platform=tranding212 ``` - - diff --git a/cmd/broker2anexoj-cli/main.go b/cmd/broker2anexoj-cli/main.go index d7a7310..2fab8c5 100644 --- a/cmd/broker2anexoj-cli/main.go +++ b/cmd/broker2anexoj-cli/main.go @@ -2,31 +2,54 @@ package main import ( "context" + "fmt" "log/slog" "os" "os/signal" "github.com/nmoniz/any2anexoj/internal" "github.com/nmoniz/any2anexoj/internal/trading212" + "github.com/spf13/pflag" "golang.org/x/sync/errgroup" ) +// TODO: once we support more brokers or exchanges we should make this parameter required and +// remove/change default +var platform = pflag.StringP("platform", "p", "trading212", "one of the supported platforms") + +var supportedPlatforms = map[string]func() internal.RecordReader{ + "trading212": func() internal.RecordReader { return trading212.NewRecordReader(os.Stdin) }, +} + func main() { - err := run(context.Background()) + pflag.Parse() + + if platform == nil || len(*platform) == 0 { + slog.Error("--platform flag is required") + os.Exit(1) + } + + err := run(context.Background(), *platform) if err != nil { slog.Error("found a fatal issue", slog.Any("err", err)) os.Exit(1) } } -func run(ctx context.Context) error { +func run(ctx context.Context, platform string) error { ctx, cancel := signal.NotifyContext(ctx, os.Kill, os.Interrupt) defer cancel() eg, ctx := errgroup.WithContext(ctx) slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, nil))) - reader := trading212.NewRecordReader(os.Stdin) + + factory, ok := supportedPlatforms[platform] + if !ok { + return fmt.Errorf("unsupported platform: %s", platform) + } + + reader := factory() writer := internal.NewStdOutLogger() diff --git a/go.mod b/go.mod index fbb2545..bdcd2cd 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( ) require ( + github.com/spf13/pflag v1.0.10 // indirect golang.org/x/mod v0.27.0 // indirect golang.org/x/tools v0.36.0 // indirect ) diff --git a/go.sum b/go.sum index 1627dc5..d1918fa 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= -- 2.49.1 From 60d6f261623850bb8e0c96333bd23af704b728b4 Mon Sep 17 00:00:00 2001 From: Natercio Moniz Date: Fri, 14 Nov 2025 14:59:04 +0000 Subject: [PATCH 4/4] rename supportedPlatforms --- cmd/broker2anexoj-cli/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/broker2anexoj-cli/main.go b/cmd/broker2anexoj-cli/main.go index 2fab8c5..74e92bc 100644 --- a/cmd/broker2anexoj-cli/main.go +++ b/cmd/broker2anexoj-cli/main.go @@ -17,7 +17,7 @@ import ( // remove/change default var platform = pflag.StringP("platform", "p", "trading212", "one of the supported platforms") -var supportedPlatforms = map[string]func() internal.RecordReader{ +var readerFactories = map[string]func() internal.RecordReader{ "trading212": func() internal.RecordReader { return trading212.NewRecordReader(os.Stdin) }, } @@ -44,7 +44,7 @@ func run(ctx context.Context, platform string) error { slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, nil))) - factory, ok := supportedPlatforms[platform] + factory, ok := readerFactories[platform] if !ok { return fmt.Errorf("unsupported platform: %s", platform) } -- 2.49.1