diff --git a/cmd/app/main.go b/cmd/app/main.go index 912cd16..a4a133f 100644 --- a/cmd/app/main.go +++ b/cmd/app/main.go @@ -26,8 +26,8 @@ func main() { defer logger.Sync() providers := providers.NewUseProviders([]providers.Provider{ - providers.NewBraintreeProvider("http://" + getEnv("BRAINTREE_URL", "localhost:8001")), - providers.NewStripeProvider("http://" + getEnv("STRIPE_URL", "localhost:8002")), + providers.NewBraintreeProvider("http://"+getEnv("BRAINTREE_URL", "localhost:8001"), logger), + providers.NewStripeProvider("http://"+getEnv("STRIPE_URL", "localhost:8002"), logger), }, logger) paymentsService := service.NewPaymentService(providers) diff --git a/internal/providers/braintree.go b/internal/providers/braintree.go index 0aa10f8..756181a 100644 --- a/internal/providers/braintree.go +++ b/internal/providers/braintree.go @@ -8,14 +8,16 @@ import ( "github.com/Tulkdan/payment-gateway/internal/domain" "github.com/google/uuid" + "go.uber.org/zap" ) type BraintreeProvider struct { - Url string + Url string + logger *zap.Logger } -func NewBraintreeProvider(url string) *BraintreeProvider { - return &BraintreeProvider{Url: url} +func NewBraintreeProvider(url string, logger *zap.Logger) *BraintreeProvider { + return &BraintreeProvider{Url: url, logger: logger.Named("BraintreeProvider")} } type BraintreeChargeCard struct { @@ -39,6 +41,11 @@ type BraintreeCharge struct { } func (b *BraintreeProvider) Charge(ctx context.Context, request *domain.Payment) (*domain.Provider, error) { + url := b.Url + "/transactions" + + b.logger.Debug("Making request to charge", + zap.String("url", url)) + body := b.createChargeBody(request) req, err := http.NewRequestWithContext(ctx, http.MethodPost, b.Url+"/charges", bytes.NewBuffer(body)) if err != nil { diff --git a/internal/providers/braintree_test.go b/internal/providers/braintree_test.go index 262b94d..b28e202 100644 --- a/internal/providers/braintree_test.go +++ b/internal/providers/braintree_test.go @@ -12,10 +12,14 @@ import ( "github.com/Tulkdan/payment-gateway/internal/domain" "github.com/Tulkdan/payment-gateway/internal/providers" "github.com/google/uuid" + "go.uber.org/zap" ) func TestBraintree(t *testing.T) { t.Run("should make request to url", func(t *testing.T) { + logger, _ := zap.NewDevelopment() + defer logger.Sync() + id, _ := uuid.Parse("2ee70bcb-5cb9-4412-a35f-c2a15fb88ef1") cardId, _ := uuid.Parse("ed6ecd4c-81d5-4e63-bb12-99439ae559e7") ctx := context.WithValue(t.Context(), "request-id", uuid.New().String()) @@ -56,7 +60,7 @@ func TestBraintree(t *testing.T) { CardId: cardId, } - provider := providers.NewBraintreeProvider(server.URL) + provider := providers.NewBraintreeProvider(server.URL, logger) response, err := provider.Charge(ctx, charge) if err != nil { diff --git a/internal/providers/provider.go b/internal/providers/provider.go index 2824cef..3c73845 100644 --- a/internal/providers/provider.go +++ b/internal/providers/provider.go @@ -29,7 +29,7 @@ func NewUseProviders(providers []Provider, logger *zap.Logger) *UseProviders { func ConfigurableUseProvider(providers []Provider, logger *zap.Logger, timeout time.Duration) *UseProviders { return &UseProviders{ providers: providers, - logger: logger, + logger: logger.Named("UseProviders"), timeout: timeout, } } diff --git a/internal/providers/provider_test.go b/internal/providers/provider_test.go index 69f2b77..a7a4025 100644 --- a/internal/providers/provider_test.go +++ b/internal/providers/provider_test.go @@ -53,7 +53,7 @@ func TestProvider(t *testing.T) { }) t.Run("should make request for second provider when first provider timeouts", func(t *testing.T) { - logger, _ := zap.NewProduction() + logger, _ := zap.NewDevelopment() defer logger.Sync() spyFirst := &SpyProvider{Timeout: 20 * time.Millisecond, Response: &domain.Provider{Description: "First"}} @@ -77,7 +77,7 @@ func TestProvider(t *testing.T) { }) t.Run("should return error when all providers timeout", func(t *testing.T) { - logger, _ := zap.NewProduction() + logger, _ := zap.NewDevelopment() defer logger.Sync() spyFirst := &SpyProvider{Timeout: 20 * time.Millisecond, Response: &domain.Provider{Description: "First"}} diff --git a/internal/providers/stripe.go b/internal/providers/stripe.go index 340be61..44c097e 100644 --- a/internal/providers/stripe.go +++ b/internal/providers/stripe.go @@ -8,14 +8,16 @@ import ( "github.com/Tulkdan/payment-gateway/internal/domain" "github.com/google/uuid" + "go.uber.org/zap" ) type StripeProvider struct { - Url string + Url string + logger *zap.Logger } -func NewStripeProvider(url string) *StripeProvider { - return &StripeProvider{Url: url} +func NewStripeProvider(url string, logger *zap.Logger) *StripeProvider { + return &StripeProvider{Url: url, logger: logger.Named("StripeProvider")} } type StripeChargeCard struct { @@ -34,9 +36,14 @@ type StripeCharge struct { Card StripeChargeCard `json:"card"` } -func (b *StripeProvider) Charge(ctx context.Context, request *domain.Payment) (*domain.Provider, error) { - body := b.createChargeBody(request) - req, err := http.NewRequestWithContext(ctx, http.MethodPost, b.Url+"/transactions", bytes.NewBuffer(body)) +func (s *StripeProvider) Charge(ctx context.Context, request *domain.Payment) (*domain.Provider, error) { + url := s.Url + "/transactions" + + s.logger.Debug("Making request to charge", + zap.String("url", url)) + + body := s.createChargeBody(request) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewBuffer(body)) if err != nil { return nil, err } @@ -50,10 +57,10 @@ func (b *StripeProvider) Charge(ctx context.Context, request *domain.Payment) (* } defer response.Body.Close() - return b.responseCharge(response) + return s.responseCharge(response) } -func (b *StripeProvider) createChargeBody(request *domain.Payment) []byte { +func (s *StripeProvider) createChargeBody(request *domain.Payment) []byte { toSend := &StripeCharge{ Amount: request.Amount, Currency: request.Currency, @@ -83,7 +90,7 @@ type StripeChargeResponse struct { CardId uuid.UUID `json:"cardId"` } -func (b *StripeProvider) responseCharge(response *http.Response) (*domain.Provider, error) { +func (s *StripeProvider) responseCharge(response *http.Response) (*domain.Provider, error) { var data StripeChargeResponse if err := json.NewDecoder(response.Body).Decode(&data); err != nil { return nil, err diff --git a/internal/providers/stripe_test.go b/internal/providers/stripe_test.go index e9814af..818bef6 100644 --- a/internal/providers/stripe_test.go +++ b/internal/providers/stripe_test.go @@ -12,10 +12,14 @@ import ( "github.com/Tulkdan/payment-gateway/internal/domain" "github.com/Tulkdan/payment-gateway/internal/providers" "github.com/google/uuid" + "go.uber.org/zap" ) func TestStripe(t *testing.T) { t.Run("should make request to url", func(t *testing.T) { + logger, _ := zap.NewDevelopment() + defer logger.Sync() + id, _ := uuid.Parse("2ee70bcb-5cb9-4412-a35f-c2a15fb88ef1") cardId, _ := uuid.Parse("ed6ecd4c-81d5-4e63-bb12-99439ae559e7") ctx := context.WithValue(t.Context(), "request-id", uuid.New().String()) @@ -56,7 +60,7 @@ func TestStripe(t *testing.T) { CardId: cardId, } - provider := providers.NewStripeProvider(server.URL) + provider := providers.NewStripeProvider(server.URL, logger) response, err := provider.Charge(ctx, charge) if err != nil {