this repo has no description

:sparkles: logger in charge for each provider

+2 -2
cmd/app/main.go
··· 26 26 defer logger.Sync() 27 27 28 28 providers := providers.NewUseProviders([]providers.Provider{ 29 - providers.NewBraintreeProvider("http://" + getEnv("BRAINTREE_URL", "localhost:8001")), 30 - providers.NewStripeProvider("http://" + getEnv("STRIPE_URL", "localhost:8002")), 29 + providers.NewBraintreeProvider("http://"+getEnv("BRAINTREE_URL", "localhost:8001"), logger), 30 + providers.NewStripeProvider("http://"+getEnv("STRIPE_URL", "localhost:8002"), logger), 31 31 }, logger) 32 32 paymentsService := service.NewPaymentService(providers) 33 33
+10 -3
internal/providers/braintree.go
··· 8 8 9 9 "github.com/Tulkdan/payment-gateway/internal/domain" 10 10 "github.com/google/uuid" 11 + "go.uber.org/zap" 11 12 ) 12 13 13 14 type BraintreeProvider struct { 14 - Url string 15 + Url string 16 + logger *zap.Logger 15 17 } 16 18 17 - func NewBraintreeProvider(url string) *BraintreeProvider { 18 - return &BraintreeProvider{Url: url} 19 + func NewBraintreeProvider(url string, logger *zap.Logger) *BraintreeProvider { 20 + return &BraintreeProvider{Url: url, logger: logger.Named("BraintreeProvider")} 19 21 } 20 22 21 23 type BraintreeChargeCard struct { ··· 39 41 } 40 42 41 43 func (b *BraintreeProvider) Charge(ctx context.Context, request *domain.Payment) (*domain.Provider, error) { 44 + url := b.Url + "/transactions" 45 + 46 + b.logger.Debug("Making request to charge", 47 + zap.String("url", url)) 48 + 42 49 body := b.createChargeBody(request) 43 50 req, err := http.NewRequestWithContext(ctx, http.MethodPost, b.Url+"/charges", bytes.NewBuffer(body)) 44 51 if err != nil {
+5 -1
internal/providers/braintree_test.go
··· 12 12 "github.com/Tulkdan/payment-gateway/internal/domain" 13 13 "github.com/Tulkdan/payment-gateway/internal/providers" 14 14 "github.com/google/uuid" 15 + "go.uber.org/zap" 15 16 ) 16 17 17 18 func TestBraintree(t *testing.T) { 18 19 t.Run("should make request to url", func(t *testing.T) { 20 + logger, _ := zap.NewDevelopment() 21 + defer logger.Sync() 22 + 19 23 id, _ := uuid.Parse("2ee70bcb-5cb9-4412-a35f-c2a15fb88ef1") 20 24 cardId, _ := uuid.Parse("ed6ecd4c-81d5-4e63-bb12-99439ae559e7") 21 25 ctx := context.WithValue(t.Context(), "request-id", uuid.New().String()) ··· 56 60 CardId: cardId, 57 61 } 58 62 59 - provider := providers.NewBraintreeProvider(server.URL) 63 + provider := providers.NewBraintreeProvider(server.URL, logger) 60 64 response, err := provider.Charge(ctx, charge) 61 65 62 66 if err != nil {
+1 -1
internal/providers/provider.go
··· 29 29 func ConfigurableUseProvider(providers []Provider, logger *zap.Logger, timeout time.Duration) *UseProviders { 30 30 return &UseProviders{ 31 31 providers: providers, 32 - logger: logger, 32 + logger: logger.Named("UseProviders"), 33 33 timeout: timeout, 34 34 } 35 35 }
+2 -2
internal/providers/provider_test.go
··· 53 53 }) 54 54 55 55 t.Run("should make request for second provider when first provider timeouts", func(t *testing.T) { 56 - logger, _ := zap.NewProduction() 56 + logger, _ := zap.NewDevelopment() 57 57 defer logger.Sync() 58 58 59 59 spyFirst := &SpyProvider{Timeout: 20 * time.Millisecond, Response: &domain.Provider{Description: "First"}} ··· 77 77 }) 78 78 79 79 t.Run("should return error when all providers timeout", func(t *testing.T) { 80 - logger, _ := zap.NewProduction() 80 + logger, _ := zap.NewDevelopment() 81 81 defer logger.Sync() 82 82 83 83 spyFirst := &SpyProvider{Timeout: 20 * time.Millisecond, Response: &domain.Provider{Description: "First"}}
+16 -9
internal/providers/stripe.go
··· 8 8 9 9 "github.com/Tulkdan/payment-gateway/internal/domain" 10 10 "github.com/google/uuid" 11 + "go.uber.org/zap" 11 12 ) 12 13 13 14 type StripeProvider struct { 14 - Url string 15 + Url string 16 + logger *zap.Logger 15 17 } 16 18 17 - func NewStripeProvider(url string) *StripeProvider { 18 - return &StripeProvider{Url: url} 19 + func NewStripeProvider(url string, logger *zap.Logger) *StripeProvider { 20 + return &StripeProvider{Url: url, logger: logger.Named("StripeProvider")} 19 21 } 20 22 21 23 type StripeChargeCard struct { ··· 34 36 Card StripeChargeCard `json:"card"` 35 37 } 36 38 37 - func (b *StripeProvider) Charge(ctx context.Context, request *domain.Payment) (*domain.Provider, error) { 38 - body := b.createChargeBody(request) 39 - req, err := http.NewRequestWithContext(ctx, http.MethodPost, b.Url+"/transactions", bytes.NewBuffer(body)) 39 + func (s *StripeProvider) Charge(ctx context.Context, request *domain.Payment) (*domain.Provider, error) { 40 + url := s.Url + "/transactions" 41 + 42 + s.logger.Debug("Making request to charge", 43 + zap.String("url", url)) 44 + 45 + body := s.createChargeBody(request) 46 + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewBuffer(body)) 40 47 if err != nil { 41 48 return nil, err 42 49 } ··· 50 57 } 51 58 defer response.Body.Close() 52 59 53 - return b.responseCharge(response) 60 + return s.responseCharge(response) 54 61 } 55 62 56 - func (b *StripeProvider) createChargeBody(request *domain.Payment) []byte { 63 + func (s *StripeProvider) createChargeBody(request *domain.Payment) []byte { 57 64 toSend := &StripeCharge{ 58 65 Amount: request.Amount, 59 66 Currency: request.Currency, ··· 83 90 CardId uuid.UUID `json:"cardId"` 84 91 } 85 92 86 - func (b *StripeProvider) responseCharge(response *http.Response) (*domain.Provider, error) { 93 + func (s *StripeProvider) responseCharge(response *http.Response) (*domain.Provider, error) { 87 94 var data StripeChargeResponse 88 95 if err := json.NewDecoder(response.Body).Decode(&data); err != nil { 89 96 return nil, err
+5 -1
internal/providers/stripe_test.go
··· 12 12 "github.com/Tulkdan/payment-gateway/internal/domain" 13 13 "github.com/Tulkdan/payment-gateway/internal/providers" 14 14 "github.com/google/uuid" 15 + "go.uber.org/zap" 15 16 ) 16 17 17 18 func TestStripe(t *testing.T) { 18 19 t.Run("should make request to url", func(t *testing.T) { 20 + logger, _ := zap.NewDevelopment() 21 + defer logger.Sync() 22 + 19 23 id, _ := uuid.Parse("2ee70bcb-5cb9-4412-a35f-c2a15fb88ef1") 20 24 cardId, _ := uuid.Parse("ed6ecd4c-81d5-4e63-bb12-99439ae559e7") 21 25 ctx := context.WithValue(t.Context(), "request-id", uuid.New().String()) ··· 56 60 CardId: cardId, 57 61 } 58 62 59 - provider := providers.NewStripeProvider(server.URL) 63 + provider := providers.NewStripeProvider(server.URL, logger) 60 64 response, err := provider.Charge(ctx, charge) 61 65 62 66 if err != nil {