Skip to content

Commit d3e167a

Browse files
committed
feat(#exporter): - Fuego-05 - Add exporter local and aws
1 parent 719b65e commit d3e167a

File tree

271 files changed

+79972
-114
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

271 files changed

+79972
-114
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@
1616

1717
pdf/*.pdf
1818
.DS_Store
19-
bin/*
19+
bin/*
20+
generated-pdf

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ docker_gen_mock:
2020
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/adapter/account_adapter_interface.go -destination=internal/repository/mock/account_adapter_mock.go -package=repository
2121
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/adapter/customer_adapter_interface.go -destination=internal/repository/mock/customer_adapter_mock.go -package=repository
2222
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/adapter/service_adapter_interface.go -destination=internal/repository/mock/service_adapter_mock.go -package=repository
23+
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/exporter/exporter_context_interface.go -destination=internal/repository/mock/exporter_context_mock.go -package=repository
2324

2425
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/repository/account_repository_interface.go -destination=cmd/fuego_billing/mock/account_repository_mock.go -package=cmd
2526
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/repository/customer_repository_interface.go -destination=cmd/fuego_billing/mock/customer_repository_mock.go -package=cmd
2627
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/repository/service_repository_interface.go -destination=cmd/fuego_billing/mock/service_repository_mock.go -package=cmd
2728
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/services/format_float.go -destination=cmd/fuego_billing/mock/format_float_mock.go -package=cmd
2829
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/services/format_int.go -destination=cmd/fuego_billing/mock/format_int_mock.go -package=cmd
30+
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/exporter/exporter_context_interface.go -destination=cmd/fuego_billing/mock/exporter_context_mock.go -package=cmd
2931

3032
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/repository/account_repository_interface.go -destination=internal/pdf/mock/account_repository_mock.go -package=pdf
3133
docker run -v $(PWD):/app -w /app fuegobilling/mockgen mockgen -source=internal/repository/customer_repository_interface.go -destination=internal/pdf/mock/customer_repository_mock.go -package=pdf
@@ -39,12 +41,14 @@ gen_mock:
3941
mockgen -source=internal/adapter/account_adapter_interface.go -destination=internal/repository/mock/account_adapter_mock.go -package=repository
4042
mockgen -source=internal/adapter/customer_adapter_interface.go -destination=internal/repository/mock/customer_adapter_mock.go -package=repository
4143
mockgen -source=internal/adapter/service_adapter_interface.go -destination=internal/repository/mock/service_adapter_mock.go -package=repository
44+
mockgen -source=internal/exporter/exporter_context_interface.go -destination=internal/repository/mock/exporter_context_mock.go -package=repository
4245

4346
mockgen -source=internal/repository/account_repository_interface.go -destination=cmd/fuego_billing/mock/account_repository_mock.go -package=cmd
4447
mockgen -source=internal/repository/customer_repository_interface.go -destination=cmd/fuego_billing/mock/customer_repository_mock.go -package=cmd
4548
mockgen -source=internal/repository/service_repository_interface.go -destination=cmd/fuego_billing/mock/service_repository_mock.go -package=cmd
4649
mockgen -source=internal/services/format_float.go -destination=cmd/fuego_billing/mock/format_float_mock.go -package=cmd
4750
mockgen -source=internal/services/format_int.go -destination=cmd/fuego_billing/mock/format_int_mock.go -package=cmd
51+
mockgen -source=internal/exporter/exporter_context_interface.go -destination=cmd/fuego_billing/mock/exporter_context_mock.go -package=cmd
4852

4953
mockgen -source=internal/repository/account_repository_interface.go -destination=internal/pdf/mock/account_repository_mock.go -package=pdf
5054
mockgen -source=internal/repository/customer_repository_interface.go -destination=internal/pdf/mock/customer_repository_mock.go -package=pdf

cmd/fuego_billing/fuego_billing.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import (
55
"os"
66

77
"github.com/prims47/FuegoBilling/internal/adapter"
8+
"github.com/prims47/FuegoBilling/internal/exporter"
89
"github.com/prims47/FuegoBilling/internal/repository"
910
"github.com/prims47/FuegoBilling/internal/services"
11+
providersExporter "github.com/prims47/FuegoBilling/providers/exporter"
1012
)
1113

1214
func main() {
@@ -19,7 +21,12 @@ func main() {
1921
serviceAdapter := adapter.NewServiceJSONAdapter()
2022
serviceRepository := repository.NewServiceRepository(serviceAdapter)
2123

22-
cmd, err := newRootCmd(os.Stdout, accountRepository, customerRepository, serviceRepository, &services.FormatFloat{}, &services.FormatInt{})
24+
registerExporter := providersExporter.NewRegisterExporter()
25+
exporters := registerExporter.Register()
26+
27+
exporterContext := exporter.NewExporterProviderContext(exporters)
28+
29+
cmd, err := newRootCmd(os.Stdout, accountRepository, customerRepository, serviceRepository, &services.FormatFloat{}, &services.FormatInt{}, exporterContext)
2330

2431
if err != nil {
2532
fmt.Fprintln(os.Stderr, err)

cmd/fuego_billing/generate_pdf.go

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package main
22

33
import (
4+
"bytes"
45
"fmt"
56
"io"
6-
"os"
77
"strings"
88
"time"
99

1010
"github.com/pkg/errors"
11+
"github.com/prims47/FuegoBilling/internal/exporter"
1112
"github.com/prims47/FuegoBilling/internal/model"
1213
"github.com/prims47/FuegoBilling/internal/pdf"
1314
"github.com/prims47/FuegoBilling/internal/repository"
@@ -24,7 +25,8 @@ func NewGeneratePDFCmd(out io.Writer,
2425
customerRepository repository.CustomerRepositoryInterface,
2526
serviceRepository repository.ServiceRepositoryInterface,
2627
formatFloat services.FormatFloatInterface,
27-
formatInt services.FormatIntInterface) *cobra.Command {
28+
formatInt services.FormatIntInterface,
29+
exporterContext exporter.ExporterContextInterface) *cobra.Command {
2830
cmd := &cobra.Command{
2931
Use: "generate-pdf",
3032
Short: "Generate billing",
@@ -53,25 +55,34 @@ func NewGeneratePDFCmd(out io.Writer,
5355
billingNumber := billing.GetBillingNumber()
5456

5557
pdfName := cleanPDFName(billingNumber, customer.Name)
56-
pdfPath := handlePDFPath(cmd)
5758

58-
billingPDF := pdf.NewBillingPDF(pdfPath, pdfName, account, customer, service, formatInt, formatFloat, billingNumber, time.Now().Format(dateFormatToPDF))
59+
buf := new(bytes.Buffer)
60+
61+
billingPDF := pdf.NewBillingPDF(account, customer, service, formatInt, formatFloat, billingNumber, time.Now().Format(dateFormatToPDF), buf)
5962
billingPDF.CreatePDF()
6063

64+
exportFlag, _ := cmd.Flags().GetString("export")
65+
66+
exporterError := exporterContext.Save(pdfName, exportFlag, buf.Bytes())
67+
68+
if exporterError != nil {
69+
return exporterError
70+
}
71+
6172
return nil
6273
},
6374
}
6475

6576
cmd.Flags().StringP("account-config-path", "a", "", "JSON Account Config Path")
6677
cmd.Flags().StringP("customer-config-path", "c", "", "JSON Customer Config Path")
6778
cmd.Flags().StringP("service-config-path", "s", "", "JSON Service Config Path")
68-
cmd.Flags().StringP("pdf-path", "p", "", "PDF Path")
79+
cmd.Flags().StringP("export", "e", "", "Exporter provider (ex: local, AWS)")
6980

7081
return cmd
7182
}
7283

7384
func cleanPDFName(billingNumber string, customerName string) string {
74-
return fmt.Sprintf("billing-%s-customer-%s-date-to-%s", billingNumber, strings.Replace(strings.ToLower(customerName), " ", "-", -1), time.Now().Format(dateFormat))
85+
return fmt.Sprintf("billing-%s-customer-%s-date-to-%s.pdf", billingNumber, strings.Replace(strings.ToLower(customerName), " ", "-", -1), time.Now().Format(dateFormat))
7586
}
7687

7788
func handleConfigs(cmd *cobra.Command) (string, string, string, error) {
@@ -122,17 +133,3 @@ func handleRepositories(accountRepository repository.AccountRepositoryInterface,
122133

123134
return account, customer, service, nil
124135
}
125-
126-
func handlePDFPath(cmd *cobra.Command) string {
127-
pdfPath, err := cmd.Flags().GetString("pdf-path")
128-
129-
if err != nil || pdfPath == "" {
130-
pdfPath = "pdf"
131-
}
132-
133-
if _, err := os.Stat(pdfPath); err != nil {
134-
os.Mkdir(pdfPath, os.ModePerm)
135-
}
136-
137-
return pdfPath
138-
}

0 commit comments

Comments
 (0)