diff --git a/internal/dto/payments.go b/internal/dto/payments.go index 5a70edb..8c089d7 100644 --- a/internal/dto/payments.go +++ b/internal/dto/payments.go @@ -1,5 +1,7 @@ package dto +import "github.com/google/uuid" + type PaymentCardInput struct { Number string `json:"number"` HolderName string `json:"holderName"` @@ -17,5 +19,15 @@ type PaymentInput struct { } type PaymentOutput struct { - Message string `json:"message"` + Id uuid.UUID `json:"id"` + CardId uuid.UUID `json:"cardId"` + CurrentAmount uint `json:"currentAmount"` +} + +func NewPaymentOutput(id, cardId uuid.UUID, currentAmount uint) *PaymentOutput { + return &PaymentOutput{ + Id: id, + CardId: cardId, + CurrentAmount: currentAmount, + } } diff --git a/internal/providers/provider.go b/internal/providers/provider.go index 3c73845..97e5a30 100644 --- a/internal/providers/provider.go +++ b/internal/providers/provider.go @@ -36,7 +36,6 @@ func ConfigurableUseProvider(providers []Provider, logger *zap.Logger, timeout t func (p *UseProviders) Payment(ctx context.Context, payment *domain.Payment) (*domain.Provider, error) { var err error = nil - attempts := 0 for _, provider := range p.providers { requestCtx, cancel := context.WithTimeout(ctx, p.timeout) @@ -46,28 +45,26 @@ func (p *UseProviders) Payment(ctx context.Context, payment *domain.Payment) (*d select { case data := <-dataCh: p.logger.Debug("[Payment] Received request successfully", - zap.String("provider", provider.GetName()), - zap.Int("attempt", attempts)) + zap.String("provider", provider.GetName())) return data, nil case error := <-errCh: p.logger.Error("[Payment] Received request with error", zap.String("provider", provider.GetName()), - zap.Int("attempt", attempts), zap.String("error", error.Error())) err = error continue case <-time.After(p.timeout): p.logger.Error("[Payment] Timeout for provider to respond", - zap.String("provider", provider.GetName()), - zap.Int("attempt", attempts)) + zap.String("provider", provider.GetName())) cancel() err = errors.New("Timeout") continue case <-ctx.Done(): + cancel() return nil, ctx.Err() } } diff --git a/internal/service/payment_service.go b/internal/service/payment_service.go index 3f88edf..adb5453 100644 --- a/internal/service/payment_service.go +++ b/internal/service/payment_service.go @@ -22,10 +22,13 @@ func (p *PaymentService) CreatePayment(ctx context.Context, input dto.PaymentInp return nil, err } - _, err = p.providers.Payment(ctx, payment) + providerData, err := p.providers.Payment(ctx, payment) if err != nil { + payment.UpdateStatus(domain.StatusRejected) return nil, err } - return &dto.PaymentOutput{Message: "Processed successfully"}, nil + payment.UpdateStatus(domain.StatusApproved) + + return dto.NewPaymentOutput(providerData.Id, providerData.CardId, providerData.CurrentAmount), nil }