diff --git a/internal/services/chapa/service.go b/internal/services/chapa/service.go index 03cba51..95ce795 100644 --- a/internal/services/chapa/service.go +++ b/internal/services/chapa/service.go @@ -135,24 +135,24 @@ func (s *Service) InitiateWithdrawal(ctx context.Context, userID int64, req doma } // Get user's wallet - wallets, err := s.walletStore.GetWalletsByUser(ctx, userID) + wallet, err := s.walletStore.GetCustomerWallet(ctx, userID) if err != nil { return nil, fmt.Errorf("failed to get user wallets: %w", err) } - var withdrawWallet domain.Wallet - for _, wallet := range wallets { - if wallet.IsWithdraw { - withdrawWallet = wallet - break - } - } + // var withdrawWallet domain.Wallet + // for _, wallet := range wallets { + // if wallet.IsWithdraw { + // withdrawWallet = wallet + // break + // } + // } - if withdrawWallet.ID == 0 { - return nil, errors.New("withdrawal wallet not found") - } + // if withdrawWallet.ID == 0 { + // return nil, errors.New("withdrawal wallet not found") + // } // Check balance - if withdrawWallet.Balance < domain.Currency(amount) { + if float64(wallet.RegularBalance) < float64(amount) { return nil, domain.ErrInsufficientBalance } @@ -164,7 +164,7 @@ func (s *Service) InitiateWithdrawal(ctx context.Context, userID int64, req doma Amount: domain.Currency(amount), Type: domain.WITHDRAW, SenderWalletID: domain.ValidInt64{ - Value: withdrawWallet.ID, + Value: wallet.RegularID, Valid: true, }, Status: string(domain.PaymentStatusPending), @@ -205,8 +205,8 @@ func (s *Service) InitiateWithdrawal(ctx context.Context, userID int64, req doma return nil, fmt.Errorf("failed to update withdrawal status: %w", err) } // Deduct from wallet (or wait for webhook confirmation depending on your flow) - newBalance := withdrawWallet.Balance - domain.Currency(amount) - if err := s.walletStore.UpdateBalance(ctx, withdrawWallet.ID, newBalance); err != nil { + newBalance := float64(wallet.RegularBalance) - float64(amount) + if err := s.walletStore.UpdateBalance(ctx, wallet.RegularID, domain.Currency(newBalance)); err != nil { return nil, fmt.Errorf("failed to update wallet balance: %w", err) } diff --git a/internal/services/santimpay/service.go b/internal/services/santimpay/service.go index 18a15b6..08fa3f0 100644 --- a/internal/services/santimpay/service.go +++ b/internal/services/santimpay/service.go @@ -134,16 +134,16 @@ func (s *SantimPayService) ProcessCallback(ctx context.Context, payload domain.S return fmt.Errorf("invalid ThirdPartyId '%s': %w", payload.ThirdPartyId, err) } - wallets, err := s.walletSvc.GetWalletsByUser(ctx, userID) + wallet, err := s.walletSvc.GetCustomerWallet(ctx, userID) if err != nil { - return fmt.Errorf("failed to get wallets for user %d: %w", userID, err) + return fmt.Errorf("failed to get wallets for customer %d: %w", userID, err) } // Optionally, credit user wallet if transfer.Type == domain.DEPOSIT { if _, err := s.walletSvc.AddToWallet( ctx, - wallets[0].ID, + wallet.RegularID, domain.Currency(amount), domain.ValidInt64{}, domain.TRANSFER_SANTIMPAY, @@ -237,7 +237,7 @@ func (s *SantimPayService) ProcessDirectPayment(ctx context.Context, req domain. if err := json.NewDecoder(resp.Body).Decode(&responseBody); err != nil { return nil, fmt.Errorf("failed to decode response: %w", err) } - + // 5. Save transfer in DB transfer := domain.CreateTransfer{ Amount: domain.Currency(req.Amount),