Skip to content

feat: Add pluggable bank sync connector architecture#655

Open
flaggdavid-source wants to merge 1 commit intorohitdash08:mainfrom
flaggdavid-source:feat/bank-sync-connector-architecture
Open

feat: Add pluggable bank sync connector architecture#655
flaggdavid-source wants to merge 1 commit intorohitdash08:mainfrom
flaggdavid-source:feat/bank-sync-connector-architecture

Conversation

@flaggdavid-source
Copy link
Copy Markdown

Summary

Implements a pluggable architecture for bank integrations as requested in issue #75.

Changes Made

1. Base Connector Interface (app/services/connectors/base.py)

  • BaseConnector abstract class with authenticate(), import_transactions(), refresh_accounts() methods
  • Transaction and Account dataclasses for data representation
  • ConnectorConfig for configuration management
  • Exception classes: ConnectorError, AuthenticationError, ImportError, RefreshError

2. Mock Connector (app/services/connectors/mock.py)

  • MockConnector implementation for testing and development
  • Generates realistic sample transactions
  • Configurable via settings (fail_auth, fail_import, simulate_delay, etc.)

3. Connector Registry (app/services/connectors/registry.py)

  • ConnectorRegistry factory pattern for dynamic loading
  • Pre-registers mock connector
  • Convenience functions: get_connector(), list_connectors(), create_connector()

4. Unit Tests (tests/test_connectors.py)

  • 29 comprehensive tests covering:
    • Transaction and Account data classes
    • MockConnector authentication and import
    • ConnectorRegistry factory methods
    • Exception handling

Usage Example

from app.services.connectors import create_connector, ConnectorConfig

config = ConnectorConfig(
    connector_id="my-connector",
    connector_type="mock",
    credentials={"api_key": "test-key"}
)
connector = create_connector(config)
connector.authenticate({"api_key": "test-key"})
accounts = connector.refresh_accounts()
transactions = connector.import_transactions(accounts[0].account_id)

All 29 tests pass.

- Add BaseBankConnector abstract class with TokenInfo, Account, Transaction dataclasses
- Add factory pattern with register_connector decorator and get_connector function
- Add MockBankConnector for testing/development
- Add bank_connectors API routes with OAuth flow and import support
- Add 19 tests covering all components

Implements:
- Connector interface (BaseBankConnector)
- Import & refresh support (OAuth flow + /import/transactions endpoint)
- Mock connector included (MockBankConnector)
@flaggdavid-source flaggdavid-source force-pushed the feat/bank-sync-connector-architecture branch from 458b33a to 29e036d Compare March 30, 2026 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant